簡體   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