-2

我在 Form1 中有 1 个标签。

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

现在我想通过 Form2 的一些方法来更新 Form1 的标签。

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

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

那么解决方案是什么?

4

1 回答 1

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

于 2012-08-20T08:06:20.297 回答