启用/禁用另一个表单而无需安装新的表单

时间:2016-09-23 09:00:24

标签: c# winforms

这是我的问题..从表单1,我想当用户点击更新项目时,表单2将打开,但表单1仍将保持打开状态。此时,我希望表单1启用为false,我已经完成了。但我希望当表单2关闭时,表单1启用应该再次为真。我不能这样做......这是我的代码:

表格1:

private void btnEditItem_Click(object sender, EventArgs e){
    Form3 form3 = new Form3();
    form3.Show();
    this.Enabled = false;

}

在表单2中(更新后用于更新项目):

private void Form3_FormClosing(object sender, FormClosingEventArgs e)
        {
            Form1 form1 = new Form1();
            form1Here.Enabled = true;
        }

在这种情况下,它将打开另一个Form1。问题是,我怎么想“在不打开它的情况下再次启用表格1?”请帮助我提供一些可能的样本。致谢

2 个答案:

答案 0 :(得分:1)

将处理程序附加到表单。

Form3 form3 = new Form3();
form3.FormClosed += new FormClosedEventHandler(frm3_FormClosed);
form3.Show();

private void frm3_FormClosed(object sender, FormClosedEventArgs e)
{
    this.Enabled = true;
}

或者您可以使用ShowDialog

  

打开一个窗口,仅在新打开的窗口关闭时返回。

答案 1 :(得分:0)

根据您的描述,您似乎需要一个模态对话框。

来自MSDN Modal and Modeless Dialog Boxes

  

必须先关闭(隐藏或卸载)模式对话框   继续使用应用程序的其余部分

这意味着如果表单1将表单2作为模式对话框打开,表单1将保持可见,但它已被禁用,在您关闭表单2之前,您无法对其执行任何操作。你的话:"表格1被禁用,当表格2关闭时表格1再次启用"。

代码:

private void btnEditItem_Click(object sender, EventArgs e)
{
    using (Form3 form3 = new Form3()}
    {
        var dlgResult = form3.ShowDialog(); // show form 3 as a modal dialog box
        // halt this procedure until form3 is closed
        // handle the result of form3:
        if (dlgResult == DialogResult.OK)
        {
            var x = form3.SomePropery;
            ProcessDialogOutput(x);
        }
    }
}

using语句不是必需的,但它是整洁的编程,因为Form3实现了IDisposable