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

时间:2014-10-17 11:00:34

标签: c# winforms

好的这就是我在做的事。

StartMenu表单有button2-当单击按钮2时,它会弹出一个新表单并被禁用。 现在新的表单(InchMm转换表单)已经启动,当我完成该表单时,我点击了X按钮。完成后,我想从StartMenu表单启用Button2。我的代码如下。

的StartMenu

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

    }

现在我收到一条错误,指出非静态字段,方法或属性需要对象引用。现在我知道这应该是我脸上的形式,但我还在学习很多,我觉得我很接近。

3 个答案:

答案 0 :(得分:3)

我会尝试这个

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

答案 1 :(得分:1)

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;

答案 2 :(得分:1)

除了其他答案,这是正确的,我想建议其他解决方案。因为您在子表单中使用IsMdiContainerMDIParent(顺便提一下,按钮点击时设置了MDI容器),您可以访问父表单,如下所示:

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