即使Static,如果程序没有问题,也不会执行两次,所以你的代码肯定有问题,把代码发上来吧。
如下是我按照你的思路随便写的测试,你可以COPY过去。
public partial class Form1 : Form
{
public static TextBox TB = new TextBox();
public Form1()
{
InitializeComponent();
TB.TextChanged += new EventHandler(TB_TextChanged);
Form Form2 = new Form();
Form2.Load += new EventHandler(Form2_Load);
Button B = new Button();
B.Click += new EventHandler(B_Click);
Form2.Controls.Add(B);
Form2.Show();
}
void B_Click(object sender, EventArgs e)
{
TB.Text = "CHANGE";
}
void Form2_Load(object sender, EventArgs e)
{
TB.Text = "TEXT";
}
void TB_TextChanged(object sender, EventArgs e)
{
MessageBox.Show(TB.Text);
}
}
此外,向窗体传值不要用这种麻烦方法。譬如你需要在FORM2中向FOMR1传值。
1)简单的方法就是直接把FORM1当做参数写在FOMR2的
构造函数里面,这样你在FORM2中就可以随便调用FOMR的属性和方法了。当然,这要求他俩必须在同一个线程之中。
2)如果这两个窗体不在同一个线程之中,你需要通过事件来传递。按照正常的线程间通过事件传递参数的方法就可以,百度搜一下到处都是。
3)如果这两个窗体不在同一个进程之中,你需要在FORM2中使用API函数FindWindow等来获得FOMR1的HWND然后使用另一个WINAPI函数SendMessage来发送消息,然后重载Form1的WndProc(ref Message m)来处理消息