Windows窗體的'CheckBox
控件實現了CheckedChanged
和CheckStateChanged
事件。據我所知,當複選框的檢查狀態改變時,兩者都會觸發。Windows窗體的CheckBox CheckedChanged與CheckStateChanged對比
CheckedChanged
先CheckStateChanged
,但除此之外,我看不出有什麼差別。我錯過了什麼嗎?應該比另一個更受歡迎嗎?
Windows窗體的'CheckBox
控件實現了CheckedChanged
和CheckStateChanged
事件。據我所知,當複選框的檢查狀態改變時,兩者都會觸發。Windows窗體的CheckBox CheckedChanged與CheckStateChanged對比
CheckedChanged
先CheckStateChanged
,但除此之外,我看不出有什麼差別。我錯過了什麼嗎?應該比另一個更受歡迎嗎?
我的猜測是,它與三態複選框做。這是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);
}
CheckState(並因此CheckStateChanged)允許使用一個複選框,可以具有三個值:它可以被選中,未選中或「不確定」 - 即,它具有ThreeState設置爲真正。
如果你不使用三態,那麼的CheckedChanged是你所需要的。
CheckState火災前的新的價值承諾。 在提交新值後觸發CheckStateChanged。
如果您尋找dataset.haschanges你需要使用checkstatechanged事件複選框值修改後做一個更新。只要確保禁用三態以避免出現NULL的問題。
至於我可以告訴大家:
CheckChanged
被解僱前的檢查值改變,所以.Checked
返回什麼值,
CheckStateChanged
被解僱後的檢查值改變,如此.Checked
回報什麼是價值IS
這是錯誤的,兩個事件在值被更改後觸發。 – 2017-01-20 16:58:04
這兩個事件實際上是相同的,除非您將ThreeState
屬性設置爲true
。沒有設置ThreeState
,當複選框被選中或未選中時,兩者都會觸發,並且兩個值將在之後的值發生更改後觸發。
的主要區別是,當你設置ThreeState
爲true,這增加了Indeterminate
CheckState
:
Indeterminate
是「檢查」。 (Checked == true
)。Checked
和Unchecked
之間的轉換是與以前一樣。Checked
和Indeterminate
之間的轉換確實不火CheckedChanged
事件,因爲Checked
住宿true
。Unchecked
和Indeterminate
之間的轉換確實火CheckedChanged
事件,因爲Checked
變化從false
到true
或反之亦然。Unchecked
轉換爲Checked
到Indeterminate
並返回到Unchecked
。您仍可以編程方式從Unchecked
轉換爲Indeterminate
。(注意Checked
屬性,它是一個兩個狀態布爾屬性和Checked
狀態,這是CheckState
屬性的三個可能的值中的一個之間的差值。)
TL; DR:主要的實際區別是CheckedChanged
事件在從CheckState.Checked
轉換爲CheckState.Indeterminate
或反過來時由於兩種狀態都被認爲已被檢查(Checked == true
)而在三狀態複選框上未觸發。
這是錯誤的,兩個事件在值更改後觸發。 – 2017-01-20 16:58:27