2014-01-20 84 views
1

這讓我感到非常緊張。我有一個簡單的CheckBox,當選中它時,按下按鈕時會假設做一些額外的工作。如果CheckBox沒有被選中,它不會做額外的工作。簡單,你會想。C#複選框選中值不正確

private void previewButton_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show(mfsCheckbox.CheckState.ToString()); 
    if (mfsCheckbox.CheckState == CheckState.Checked) 
    { 
     //never gets here 
     //do extra stuff 
    } 
    if (mfsCheckbox.Checked) 
    { 
     //never gets here 
     //do extra stuff 
    } 
} 

private void mfsCheckbox_CheckedChanged(object sender, EventArgs e) 
{ 
    MessageBox.Show(mfsCheckbox.CheckState.ToString()); 
    if (mfsCheckbox.Checked) 
    { 
     mfsCheckbox.Checked = true; 
     mfsCheckbox.CheckState = CheckState.Checked; 
    } 
} 

當運行這段代碼中,選中該複選框,並按照CheckChanged事件代碼,它說:「經過」。爲了更好的衡量,我甚至在CheckChanged事件中設置了這兩個狀態,以確保它們被正確設置。然後,我直接點擊預覽按鈕後,它剛剛告訴我CheckBox是「選中」,它說「未選中」,並不會運行我的if語句...

基本上,它從Checked到Unchecked,即使當我可以直觀地看到它仍然被檢查,並且在我通過編程確保它的狀態應該被「檢查」之後。

感謝您的任何幫助。

更新:初始代理被另一個模塊通過STRAY代碼調用。我會承擔責任,在夜間服務器構建生活作爲懲罰責任。投票結束,因爲這對任何人都沒有價值。

+0

如果我沒有錯誤複選框的值尚未在事件處理程序中設置。這可能是問題嗎? –

+0

物業ThreeState的價值是多少? – Steve

+0

ThreeState在聲明事件處理程序MessageBox中的「已檢查」後爲假。 – CODe

回答

1

MSDN說,在CheckBox.CheckState

如果ThreeState屬性設置爲false時,CheckState屬性 值只能設置爲CheckState.Indeterminate的代碼,而不是由 用戶交互。

看來你需要一個不同的方法,如果你想只有當CheckState是經過

您可以添加在第一個檢查出時,才啓用另一個複選框來執行代碼

private void mfsCheckbox_CheckedChanged(object sender, EventArgs e) 
{ 
    checkForExtraStuff.Enabled = mfsCheckbox.Checked; 
} 

private void previewButton_Click(object sender, EventArgs e) 
{ 
    if (mfsCheckbox.Checked) 
    { 
     //do basic stuff 
     if (checkForExtraStuff.Checked) 
     { 
      //do extra stuff 
     } 
    } 
} 
+0

Checked Property值如何?不同的方法會是什麼樣子?我在此之前使用過CheckBox.Checked屬性,現在只有這樣才能... – CODe

+0

檢查可能只是真/假,因此它不適用於三態標誌。根據您的要求,最好添加另一個複選框,如果第一個複選框未選中,並且在第一個複選框被選中時啓用。此時用戶可以設置檢查第二個複選框。 (在許多配置形式中看到) – Steve

+0

我需要確定的是如果它被檢查或不。我使用CheckState只是因爲Checked沒有工作出於某種原因,這真的是我想弄明白的。 – CODe