2012-04-19 56 views
0

我正在開發一個Windows窗體,根據複選框的選中狀態啓用/禁用某些控件。爲了觀察這個,有一個CheckedChanged事件的事件處理程序。這適用於其他形式,具有相同的確切代碼,但在這裏無法正常工作。無論複選框處於選中狀態還是未選中狀態,選中狀態始終爲false。下面的代碼:C# - 複選框的CheckChanged事件錯誤檢查狀態

private void chkDisable_CheckedChanged(object sender, EventArgs e) 
    { 
     if (chkDisable.Checked) 
     { 
      DisableFormFields(); 
     } 
     else 
     { 
      EnableFormFields(); 
     } 
    } 

就像我說的,這個確切的代碼在一個形式很好 - 選中狀態正確設置爲true或根據你只是改變它爲false。但是在新的形式中,Checked狀態在該方法中始終爲false,無論是正在選中還是未選中。事件觸發正常,並且擊中了我在方法中設置的斷點,但Checked狀態從不改變。有什麼建議?

謝謝!

+0

什麼是你想要檢查的複選框的名稱?即使它觸發了正確的事件處理程序,也許你正在測試錯誤的控件(chkDisable)? – Strillo 2012-04-19 12:40:57

+0

嘗試使用CheckBox.CheckState屬性:如果(chkDisable.CheckState == CheckState.Checked) – Prashant 2012-04-19 12:42:11

回答

2

試試這個

private void chkDisable_CheckedChanged(object sender, EventArgs e) 
{ 
     if (((CheckBox)sender).Checked) 
     { 
      DisableFormFields(); 
     } 
     else 
     { 
      EnableFormFields(); 
     } 
} 
+0

如果eventhandler應用於不正確的複選框,則無法工作 – Marshal 2012-04-19 12:48:40

+1

同意,但我認爲問題出在chkDisable的錯誤鏈接上。看他在代碼中停止了斷點,所以他應用事件來糾正複選框。 – Likurg 2012-04-19 12:59:24

+0

謝謝,明白了。我仍然很煩惱,我用不同形式使用的代碼在這裏不起作用,但現在我只是很高興能夠解決這個問題。謝謝! – Greg 2012-04-19 13:07:02

3

檢查您的eventHandler chkDisable_CheckedChanged是否適用於更正複選框,即複選框爲chkDisable複選框。

如果仍然問題persits,刪除再拖動 CheckBox控件和套用事件

應用鑄造和快捷方式不應該是正確的方法來解決問題(這是我個人認爲)。

+0

最正常的答案) – Cynede 2012-04-19 12:44:12

+0

@Alessa:不:)。它最爲理智的錯誤。 :P – Marshal 2012-04-19 12:49:23

+0

不,不是問題。就像我在帖子中所說的那樣,事件觸發並採用正確的方法。在發佈之前,我還仔細檢查了正確的複選框是否使用了正確的方法。編輯:Likurg的答案正確工作。 – Greg 2012-04-19 13:04:37