在访问和修改父表单值方面需要帮助

时间:2012-08-20 07:57:58

标签: c# .net winforms windows-applications

我在Form1中有一个标签。

现在我在Form2中执行一些操作。(我的form1已经打开)

现在我想通过Form2的某种方法更新Form1的标签。

        Form1 frm=new Form1();
        Label label = frm.label1;
        MethodInvoker action = () => label.Text = "Finished";
        label.BeginInvoke(action);

这是我在form1中编写的代码。 但我得到以下例外: “在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke。”

那么解决方案是什么?

1 个答案:

答案 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