从窗体1创建的窗体2更新窗体1中的控件。

时间:2019-05-02 21:09:46

标签: c# winforms

我检查并发现this这类问题中提到过很多次的文章,但这不是我想要的答案...

我有一个表单Form_Main frmMainPage,它创建了Form_Status frmStatus。 当这样做时,我禁用了frmMainPage上的控件,以使用户在处理事物时不会弄乱事物。 处理完毕后,他们可以关闭frmStatus窗口以返回到frmMainPage继续工作。我无法从frmStatus重新启用控件。我尝试使用frmMainPage_Enter,但是它在第一次加载时会发疯,因此实际上不是一个选择。

我在Form_Main.cs中有以下内容

public void EnableForm() {
    this.gridData.Enabled = true;
    this.txtLocation.Enabled = true;
    this.txtSupplier.Enabled = true;
    this.txtItem.Enabled = true;

    this.FillTable("", "", "");
}

当我使用它时(上面的每篇文章):

private void btnClose_Click(object sender, EventArgs e) {
    Form_Main f2 = new Form_Main();
    f2.Show();
    f2.EnableForm();

    this.Close();
}

它创建一个第二 Form_Main,这不是我想要的不是。我想知道如何更改现有表单中的控件。

编辑:否,也没有建议使用this。当答案由表单1创建时,大多数答案都涉及从表单1更改表单1上的控件。在我的情况下,我需要做相反的事情,并更改由表单1创建的表单2上窗体1的控件。圆形的东西。

2 个答案:

答案 0 :(得分:1)

我可以想到几种方法来做到这一点。第一种(也是最常见的)是模态显示第二种形式(这意味着在运行第二种形式的代码时,第一种形式的代码会暂停):

private void button1_Click(object sender, EventArgs e)
{
    var statusForm = new frmStatus();

    // ShowDialog will prevent frmMainPage from being accessible.
    // This form's code will pause at the next line until the second form is closed
    statusForm.ShowDialog();
}

在某些情况下,您希望同时访问两个表单。如果是这种情况,另一种方法是为第二个表单的FormClosed事件添加一个事件处理程序,您可以在其中重新启用第一个表单的控件。这将允许同时访问两种形式:

private void button1_Click(object sender, EventArgs e)
{
    var statusForm = new frmStatus();

    // Add an event handler for the second form's FormClosed event, and
    // put code in that event handler to re-enable controls on this form
    statusForm.FormClosed += statusForm_FormClosed;

    // Disable our controls on this form and show the second form
    DisableForm();
    statusForm.Show();
}

private void statusForm_FormClosed(object sender, FormClosedEventArgs e)
{
    // When the second form closes, re-enable controls on this form
    EnableForm();
}

private void DisableForm()
{
    this.gridData.Enabled = false;
    this.txtLocation.Enabled = false;
    this.txtSupplier.Enabled = false;
    this.txtItem.Enabled = false;
}

public void EnableForm() 
{
    this.gridData.Enabled = true;
    this.txtLocation.Enabled = true;
    this.txtSupplier.Enabled = true;
    this.txtItem.Enabled = true;

    this.FillTable("", "", "");
}

答案 1 :(得分:1)

您不需要执行此禁用启用。 您只需要使用ShowDialog()显示新内容即可;像这样:

frmStatus.ShowDialog();

而不只是:

frmStatus.Show();