我想通过以下声明在适当的位置更改小部件的背景颜色:
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事件。他们都没有工作。
答案 0 :(得分:0)
当你描述行为时,我能看到的唯一区别是 timinig 。那么在表单显示之前或之后设置backgroundcolor有什么区别?那么你有一些事件要检查,比如 Form_Load , Form_Shown 或 Form_Activate 。如果在任何这些事件中(或在这些事件中调用的方法中)设置了文本框的backgroundcolor,它将覆盖您在表单上调用.Show()/ .ShowDialog()之前设置的内容