2015-04-14 58 views
1

我的主窗體上有一個ToolStripButton,並附有一個單擊事件,點擊它將打開一個對話框並將toolStripButton的Checked狀態設置爲「true」。 在上面點擊的窗體的FormClosing事件中,試圖設置相同的toolStripButton的Checked狀態爲'false'。 但是國家總是保持「真實」。從FormClosing事件設置屬性值

toolStripButton1_Click(object sender, EventArgs e) 
{ 
if (!toolStripButton1.Checked) 
     { 
      toolStripButton1.Checked = true; 
      RevisionTools revTools = new RevisionTools(); 
      revTools.ShowDialog(); 
     } 
} 

創建一個屬性象下面這樣:

public bool revEditState 
    { 
     get{return this.toolStripButton1.Checked;} 
     set{this.toolStripButton1.Checked = value;} 
    } 

,並在對話框即獲取開放上點擊:

public partial class RevisionTools : Form 
{ 
    public RevisionTools() 
    { 
     InitializeComponent(); 
    } 
    private void RevisionTools_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     MainForm mainForm = new MainForm(); 
     mainForm.revEditState = false; 
    } 
} 

這是設置屬性值的正確方法是什麼?它是一個WinForms應用程序。

+0

您正在將新對象的(mainForm)屬性設置爲false。不是原創的 – Orifjon

回答

3

您正在將其設置在MainForm的新實例上。您需要在打開對話框時傳遞MainForm的實例,或者您可以在ShowDialog後的MainForm中執行此操作。

在你的例子中,在ShowDialog上執行這將是一個更好的方法。

RevisionTools revTools = new RevisionTools(); 
revTools.ShowDialog(); 
this.revEditState = false; 

注意:您還可以將Dialog的結果捕獲爲DialogResult以有條件地設置此值。即,如果用戶在對話框上單擊了確定或取消。

0

它保持真實,因爲在您的FormClosing事件中,您在mainForm上的全新實例中將revEditState設置爲false。您可以將變量作爲參考傳遞給輔助表單,也可以在主窗體中分配FormClosing事件,如下所示;

revTools.FormClosing += new FormClosingEventHandler(RevisionTools_FormClosing); 

您需要將「RevisionTools_FormClosing」移動到主窗體。