【问题标题】:Need help in accessing and modifying parent form value在访问和修改父表单值方面需要帮助
【发布时间】:2012-08-20 07:57:58
【问题描述】:

我在 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。”

那么解决办法是什么?

【问题讨论】:

  • 在代码示例中,您创建了一个新的 form1,在您的问题中,您说您已经有一个 form1 的实例。哪一个是正确的?
  • 在将“完成”分配给Label.Text之前调用label.Handle

标签: c# .net winforms windows-applications


【解决方案1】:

这是您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-26
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多