在form1的函数中更改from2的标签

时间:2011-04-09 02:40:09

标签: c#

好的,所以我让Form1调用Form2,允许我从Form2访问Form1的函数。代码低于......

... Form1中

    private void btnShowForm2_Click(object sender, EventArgs e)
    {
        frmForm2 tempDialog = new frmForm2(this);
        tempDialog.ShowDialog();
    }

...窗体2

    private frmForm1 _parent;

    public frmForm2(frmForm1 frm1)
    {
        InitializeComponent();
        _parent = frm1;
    }

    private void btnDoFunction_Click(object sender, EventArgs e)
    {
        _parent.DoProcess();
    }

现在我遇到了一个新问题。我正在尝试更新Form2的状态标签,但是处理手头任务的函数是在Form1中。如何在Form1的函数中更改Form2的标签?

3 个答案:

答案 0 :(得分:1)

您可以使用委托和活动来执行此操作。

  1. 使用委托
  2. 在form1中创建一个事件
  3. 关于form1进程的进度触发事件。
  4. 将一个处理程序放在form2中的form1事件中。
  5. 从处理程序中的eventargs实现对象中提取进度。
  6. 以表格2中的标签显示

答案 1 :(得分:0)

这是一个混乱...... form1显示form2,它调用form1上的方法更新内容form2?您的问题本身很简单(将tempDialog变量移动到form1类而不是此方法中 - 然后您可以在DoProcess中使用它来调整您想要的任何控件)但是这里存在严重的可维护性问题,您应该退一步并尝试地址。

答案 2 :(得分:0)

如果你真的想从frm1访问frm2.lbl,那么frm2.lbl必须是公共的,这可以在Form2上的标签的属性窗口中更改。 (在我认为的修饰语下)

private void btnDoFunction_Click(object sender, EventArgs e)
{
    _parent.DoProcess();
}

(在form1中)

public void DoProcess();
{
    tempDialog.lable.Text = "hope this works";
}