什么';s实际单击按钮和InvokeOnClick()方法之间的区别
本文关键字:InvokeOnClick 方法 之间 区别 按钮 单击 什么 | 更新日期: 2023-09-27 18:22:05
我想用下面的语句在适当的时候更改小部件的背景颜色:
IpAddressTextEdit.BackColor = Color.LimeGreen;
在尝试了许多方法之后,当我将其放入button_click事件方法中并实际点击按钮时,它终于起作用了。就像下面一样:
public void button3_Click(object sender, EventArgs e)
{
IpAddressTextEdit.BackColor = Color.LimeGreen;
Console.WriteLine("Button 3 is clicked ! ");
}
但是,我从来都不想通过点击来实现这一点,当我在其他地方使用InvokeOnClick()调用这个点击时,它也不起作用。甚至我的调试器也指示该语句已经执行,并且赋值成功,还打印出"按钮3被点击了!",一切都和实际点击一样。唯一的区别是我的小部件不会改变它的颜色。
我猜后面有一些机制,调试器不会显示给我。这个任务只是停留在后台,永远不会影响前端UI。那么InvokeOnClick和实际点击的真正区别是什么呢。我该怎么做才能让它发挥作用。
InvokeOnClick()的代码:
if (TcpSocket.Connected)
{
MainForm mf = new MainForm();
SettingsControl sc = new SettingsControl();
sc.IpAddressTextEdit.BackColor = Color.LimeGreen; // assign directly
mf.InvokeOnClick(sc.button3, EventArgs.Empty); // Invoke a btn click
sc.OnSocketConnectedEventHandler(EventArgs.Empty); // raise a event create by my own
if(!SocketRecvThread.IsAlive)
SocketRecvThread.Start(); //Begin receive;
mf.SetupLeakDetector(); //Send command to setup machine
}
可以看出,我尝试了一些方法,包括直接分配颜色、调用自己创建的事件、调用btnclick事件。它们都不起作用。
在描述行为时,我能看到的唯一区别是时间。那么,在表格显示之前或之后设置背景颜色有什么区别呢?您有一些事件需要检查,如Form_Load、Form_Shown或Form_Activate。如果在这些事件中的任何一个(或在这些事件调用的方法中)设置了文本框的背景色,它将覆盖在表单上调用.Show()/.ShowDialog()之前设置的内容
显示表单时的完整事件列表