簡體   English   中英

Winform Checkbox MouseDown事件處理程序不允許觸發CheckedChanged事件

[英]Winform Checkbox MouseDown event handler not allowing CheckedChanged event to fire

我有一個WinForm,其中包含多個相互依賴的控件,以實現其可見性和內容。 我有一對單選按鈕,用於控制組合框(ComboBoxA)的啟用/禁用標志和內容。 此組合框上的選擇控制復選框的可見性。 選中此復選框可控制另一個組合框(ComboBoxB)的可見性和內容。 這些控件的業務需求非常復雜。 結果,我需要能夠以編程方式並通過用戶操作來觸發事件,並且在每種情況下都要做不同的事情。

在復選框的情況下,我在加載數據時(如果需要)以編程方式對其進行了檢查,這會觸發CheckedChanged事件,進而執行控制ComboBoxB的其他操作。 此代碼很原始,沒有什么特別的,但是我的問題是理論性的,而不是實用的。 請繼續閱讀。

由於這一要求,我需要一種區分程序檢查和用戶操作的方法。 我嘗試使用Click事件和CheckedChanged事件,並在click事件中設置了一個標志,以表示用戶的操作。 不幸的是,CheckedChanged事件在Click事件之前觸發,從而結束了這一技巧。

現在,我嘗試使用MouseDown事件捕獲用戶操作。 但是很有趣的是,一旦事件觸發,復選框仍保持未選中狀態,而CheckedChanged事件不會觸發。

現在,我設法在代碼中使用一個標志來確定程序檢查並使用它來區分兩者,但是我很好奇為什么MouseDown事件不允許檢查該復選框。 有任何想法嗎? 我在網上搜索過,但是我沒有做完詳盡的工作,或者谷歌沒有為我返回正確的結果。 如果有人真的能夠找到該問題的Google搜索結果,我深表歉意。

這是代碼中的其他內容,不是MouseDown事件,它阻止了CheckChanged被觸發。
這就是我所知道的:
我在一個空表單中添加了一個復選框和一個按鈕,並向該按鈕上的Click以及復選框CheckedChangedKeyDownMouseDown事件添加了事件處理程序。 我還添加了一個名為LastEventRaised的字符串變量,在CheckedChanged中,我僅顯示了一個MessageBox

string LastEventRaised = string.Empty;
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    MessageBox.Show("Checked changed " + LastEventRaised);
    LastEventRaised = string.Empty;
}

private void checkBox1_KeyDown(object sender, KeyEventArgs e)
{
    LastEventRaised = "KeyDown";
}

private void checkBox1_MouseDown(object sender, MouseEventArgs e)
{
    LastEventRaised = "MouseDown";
}

private void button1_Click(object sender, EventArgs e)
{
    LastEventRaised = "programmatically";
    checkBox1.Checked = !checkBox1.Checked;
}

每次彈出消息框時,我都會得到正確的消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM