【发布时间】:2015-11-14 20:38:00
【问题描述】:
我想使用以下语句在适当的位置更改小部件的背景色:
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 事件。它们都不起作用。
【问题讨论】:
-
向我们展示调用
InvokeOnClick方法的代码。 -
您好,您是否需要“假装”单击按钮而不是简单地调用方法?
-
谢谢! @PatrickHofman,代码已添加,
-
@LucMorin,您好,是的,正如我刚刚添加的代码,只是调用一个方法不起作用,所以我正在尝试其他方法使其起作用。
-
您创建了新的 mf 表单,但我没有看到您向用户展示它的地方。