实际单击按钮和InvokeOnClick()方法之间的区别是什么?

时间:2015-11-14 20:38:01

标签: c# .net winforms click

我想通过以下声明在适当的位置更改小部件的背景颜色:

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。那么什么是真正的区别btw 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事件。他们都没有工作。

1 个答案:

答案 0 :(得分:0)

当你描述行为时,我能看到的唯一区别是 timinig 。那么在表单显示之前或之后设置backgroundcolor有什么区别?那么你有一些事件要检查,比如 Form_Load Form_Shown Form_Activate 。如果在任何这些事件中(或在这些事件中调用的方法中)设置了文本框的backgroundcolor,它将覆盖您在表单上调用.Show()/ .ShowDialog()之前设置的内容

Complete list of events when a form is shown