2010-05-06 61 views
42

Windows窗體的'CheckBox控件實現了CheckedChangedCheckStateChanged事件。據我所知,當複選框的檢查狀態改變時,兩者都會觸發。Windows窗體的CheckBox CheckedChanged與CheckStateChanged對比

CheckedChangedCheckStateChanged,但除此之外,我看不出有什麼差別。我錯過了什麼嗎?應該比另一個更受歡迎嗎?

回答

18

我的猜測是,它與三態複選框做。這是CheckState設定器的膽:

if (this.checkState != value) 
{ 
    bool flag = this.Checked; 
    this.checkState = value; 
    if (base.IsHandleCreated) 
    { 
    base.SendMessage(0xf1, (int) this.checkState, 0); 
    } 
    if (flag != this.Checked) 
    { 
    this.OnCheckedChanged(EventArgs.Empty); 
    } 
    this.OnCheckStateChanged(EventArgs.Empty); 
} 
55

CheckState(並因此CheckStateChanged)允許使用一個複選框,可以具有三個值:它可以被選中,未選中或「不確定」 - 即,它具有ThreeState設置爲真正。

如果你不使用三態,那麼的CheckedChanged是你所需要的。

-2

CheckState火災前的新的價值承諾。 在提交新值後觸發CheckStateChanged。

如果您尋找dataset.haschanges你需要使用checkstatechanged事件複選框值修改後做一個更新。只要確保禁用三態以避免出現NULL的問題。

+1

這是錯誤的,兩個事件在值更改後觸發。 – 2017-01-20 16:58:27

1

至於我可以告訴大家:

CheckChanged被解僱前的檢查值改變,所以.Checked返回什麼值,

CheckStateChanged被解僱後的檢查值改變,如此.Checked回報什麼是價值IS

+1

這是錯誤的,兩個事件在值被更改後觸發。 – 2017-01-20 16:58:04

4

這兩個事件實際上是相同的,除非您將ThreeState屬性設置爲true。沒有設置ThreeState,當複選框被選中或未選中時,兩者都會觸發,並且兩個值將在之後的值發生更改後觸發

的主要區別是,當你設置ThreeState爲true,這增加了IndeterminateCheckState

  • 控制考慮Indeterminate是「檢查」。 (Checked == true)。
  • CheckedUnchecked之間的轉換是與以前一樣。
  • CheckedIndeterminate之間的轉換確實CheckedChanged事件,因爲Checked住宿true
  • UncheckedIndeterminate之間的轉換確實CheckedChanged事件,因爲Checked變化從falsetrue或反之亦然。
  • 點擊三個狀態複選框,狀態從Unchecked轉換爲CheckedIndeterminate並返回到Unchecked。您仍可以編程方式從Unchecked轉換爲Indeterminate

(注意Checked屬性,它是一個兩個狀態布爾屬性和Checked狀態,這是CheckState屬性的三個可能的值中的一個之間的差值。)

TL; DR:主要的實際區別是CheckedChanged事件在從CheckState.Checked轉換爲CheckState.Indeterminate或反過來時由於兩種狀態都被認爲已被檢查(Checked == true)而在三狀態複選框上未觸發。