C# Winform static 控件的 TextChange事件,为什么执行两次?求求求!!!

1.需要向一窗体传值,并触发某一时间,所以自定义一个static的TextBox控件,并写了它的TextChange事件。这样当别的窗体改变这个TextBox控件的值时,就会触发这个事件。
2.可我现在一改变这个TextBox的值,这个TextBoxChange事件就会执行 两次 。
3,求 原因? 怎么让它执行一次或其他解决方法? 本人刚学习,望见笑,求建议。

即使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)来处理消息
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-10
原因就是这个控件是静态全局,你同时打开两个窗口,而两个窗口都有它的change事件,当然会执行两次了,如果你只打开一个,应该就会使执行一次了。你这么传值不如写成事件。
第2个回答  2012-03-14
建议你修改窗体的构造方法传入父窗体对象调用里面的textchanged方法 你的执行了多次要看代码 static对象只会初始化一次 这点要注意 以后即使调用初始化方法都不会执行
相似回答
大家正在搜