什么';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事件。它们都不起作用。

什么';s实际单击按钮和InvokeOnClick()方法之间的区别

在描述行为时,我能看到的唯一区别是时间。那么,在表格显示之前或之后设置背景颜色有什么区别呢?您有一些事件需要检查,如Form_LoadForm_ShownForm_Activate。如果在这些事件中的任何一个(或在这些事件调用的方法中)设置了文本框的背景色,它将覆盖在表单上调用.Show()/.ShowDialog()之前设置的内容

显示表单时的完整事件列表