繁体   English   中英

通过退出表单内的表单来启用禁用的按钮

[英]enable a disabled button by exiting off a form inside a form

好的,这就是我在做什么。

StartMenu表单具有button2-单击按钮2时,它将弹出一个新表单并被禁用。 现在启动了新表格(InchMm转换表格),当我完成该表格后,我按下了X按钮。 完成此操作后,我希望从StartMenu窗体启用Button2。 我的代码如下。

开始菜单

 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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM