我在Form1中有一个标签。
现在我在Form2中执行一些操作。(我的form1已经打开)
现在我想通过Form2的某种方法更新Form1的标签。
Form1 frm=new Form1();
Label label = frm.label1;
MethodInvoker action = () => label.Text = "Finished";
label.BeginInvoke(action);
这是我在form1中编写的代码。 但我得到以下例外: “在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke。”
那么解决方案是什么?
答案 0 :(得分:0)
这是Form2?
中的代码,您说Form1
已经打开了吗?您不会以这种方式访问Form1
,因为您正在创建新表单,而不是使用现有表单。
您收到此错误是因为您尚未显示该表单,因此它没有Handle
。我认为你可以在CreateHandle
显示窗口之前强制使用手柄,但在这种情况下,这不会成为你的解决方案。
Form2
是一种模态形式吗?然后,您可以将新标签文本公开为Form2
的属性,并使用Form1
检索它。
Form1
:
Form2 frm = new Form2();
frm.ShowDialog();
Label1.Text = frm.NewLabelText;
Form2
:
public string NewLabelText
{
get { return this.myMethodToGetLabelText(); }
}
如果表单不是模态的并且应该更新您的最佳选择可能是使用delegates