通过退出窗体内部的窗体来启用禁用按钮



好的,这就是我正在做的。

"开始菜单"窗体有按钮2-单击按钮2时,将显示一个新窗体并被禁用。现在,新表单(InchMm转换表单)已经启动,当我完成该表单时,我按下X按钮。完成此操作后,我希望启用"开始菜单"窗体中的按钮2。下面是我的代码。

开始菜单

 private void button2_Click(object sender, EventArgs e)
    {
        this.IsMdiContainer = true;
        InchMm_Conversion f = new InchMm_Conversion();
        f.MdiParent = this;
        f.Show();
        button2.Enabled = false;
    }

    private void button3_Click(object sender, EventArgs e)
    {
        this.LayoutMdi(MdiLayout.ArrangeIcons);
    }
    public void enableB() 
    {
        button2.Enabled = true;
    }

InchMm转换形式

private void InchMm_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
    {
        StartMenu.enableB();
    }

现在我得到一个错误,说非静态字段、方法或属性需要对象引用。现在我知道这在我的脸上应该是正确的,但我仍在学习,我认为我已经接近了。

我会试试这个

private void button2_Click(object sender, EventArgs e)
{
        this.IsMdiContainer = true;
        InchMm_Conversion f = new InchMm_Conversion();
        f.MdiParent = this;
//Here you set an event. When the form closes the here specified method is called 
        f.FormClosed += f_FormClosed; 
        f.Show();
        button2.Enabled = false;
}

private void button3_Click(object sender, EventArgs e)
{
    this.LayoutMdi(MdiLayout.ArrangeIcons);
}       
//This method is executed when the form is closed
    void f_FormClosed(object sender, FormClosedEventArgs e)
    {
           button2.Enabled = true;
    }

InchMm_Conversion()构造函数修改为InchMm_Conversion(StartMenuForm)。因此,您可以在构造中将"父"对话框传递给InchMm_Conversion。在私有字段中保存一个引用,当关闭子窗体时可以访问它。(ReferenceToStartMenuForm.enableB())(我知道有更优雅的解决方案,但这很容易实现)

InchMm_Conversion(StartMenuForm form)
{
    myForm = form;    
}
private void InchMm_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{
    myForm.enableB();
}
private StartMenuForm myForm;

除了其他正确的答案外,我还想提出其他解决方案。因为您在子窗体中使用IsMdiContainerMDIParent(顺便说一句,在单击按钮时设置MDI容器很奇怪),所以您可以访问父窗体,如下所示:

private void InchMm_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{
    StartMenu form = this.MDIParent as StartMenu;
    if(form != null)
       form.enableB();
}

最新更新