2014-02-26 39 views
1

我有兩個winforms。我稱父母和孩子的形式。在父窗體上,我有一個檢查編輯控件。我想在選中時顯示子表單(m_chkEdit.checked = true) 它的檢查和取消選中狀態都存儲在我的註冊表中。當父窗體加載時,檢查編輯控件的狀態會在之前更新它的狀態。如果檢查編輯控件的檢查更改事件發生時顯示一個winform時出現邏輯錯誤?

好的,父窗體有兩種方法。 OnLoad方法從註冊表中加載並更新m_chkEdit的狀態。當我檢查它時,m_chkEdit_CheckedChanged事件方法會調用子窗體(m_chkEdit.Checked = true)。

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e);    

    RegistryData.ReadCheckEditStatus = m_chkEdit.Checked ? RegistryData.EnumCheckEdit.ReadCheckEditYes : RegistryData.EnumCheckEdit.ReadCheckEditNo;   
} 

private void m_chkEdit_CheckedChanged(object sender, EventArgs e) 
{ 
    if (m_chkEdit.Checked) 
    { 
     ChildForm form = new ChildForm(); 
     form.Show(); 
    } 
} 

這裏是我的問題:如果檢查編輯控件的狀態是先前檢查,時加載父窗體子窗體將顯示。當我檢查checkEdit控件時,我只想要子窗體顯示。

我不知道checkEdit有另一個事件可以解決問題嗎?

你能給我一些建議嗎? 感謝提前。

回答

1

嘗試之後從CheckedChanged事件臨時取消 只需註冊m_chkEdit_CheckedChanged:

m_chkEdit.CheckedChanged -= m_chkEdit_CheckedChanged; 
m_chkEdit.Checked = ...; // <-- Restore checked status from registry here 
m_chkEdit.CheckedChanged += m_chkEdit_CheckedChanged; 
+0

我不會這樣。使用標誌是更好的模式。 – user2126375

+0

您的解決方案解決了這個問題。非常感謝! –

0

我會用一些標誌。該標誌在父構造函數中設置爲false,在OnShown事件中設爲true。在你的m_chkEdit_CheckedChanged中,你會檢查這個標誌,並且只有在扁平時纔打開子窗口。因此你可以在Load事件中設置m_chkEdit。

或第二液複選框被設定爲合適的值

+0

您解決了這個問題,但我更喜歡梅德年代的第二個解決方案。非常感謝! –

相關問題