如果用戶單擊列表框中的項目,則調用listboxItems_SelectedIndexChanged。但是,即使用戶錯過某個項目並隨機在列表框中單擊(而不是在項目上),仍會調用listboxItems_SelectedIndexChanged。檢測鼠標單擊是否不在列表框中的項目[C#]
我該如何改變這種情況?我只想在物品點擊時採取行動。
注意:刪除用鍵盤導航應用程序的功能不是一種選擇。
如果用戶單擊列表框中的項目,則調用listboxItems_SelectedIndexChanged。但是,即使用戶錯過某個項目並隨機在列表框中單擊(而不是在項目上),仍會調用listboxItems_SelectedIndexChanged。檢測鼠標單擊是否不在列表框中的項目[C#]
我該如何改變這種情況?我只想在物品點擊時採取行動。
注意:刪除用鍵盤導航應用程序的功能不是一種選擇。
此鏈接可以幫助,而不是雙擊,實現相同的單次點擊
這不適用於鍵盤導航,因此不是我的問題的好答案。 –
我想,在某些情況下,你不必在你的控制不夠列表中的項目,因此,你必須一些空間,你可以點擊,然後SelectedIndexChanged被解僱。
我想你不能動態地調整控件大小來始終適合列表項的數量,否則你不會問這個問題。
現在,當用戶點擊(選擇)相同的列表項時會發生什麼?即使選擇的索引相同(如果第一次點擊時發生相同的邏輯),是否應該發生一些邏輯?
如果您需要選擇相同的指數不止一次應該被忽略,那麼你可以使用下面的技巧:
保持一個變量在表格範圍內(含ListBox控件的形式),並在每次選擇索引更改設置該變量。然後稍後使用它來檢查是否進行了相同的選擇來忽略處理事件。這裏是一個例子:
private int _currSelIdx = -1; // Default value for the selected index when no selection
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex == _currSelIdx)
return;
Console.WriteLine(listBox1.SelectedIndex);
_currSelIdx = listBox1.SelectedIndex;
}
這不是很漂亮,但嘿......無論什麼作品!
也許SelectedIndexChanged不是放置邏輯的正確位置,因爲即使在使用鍵盤更改選區時也會觸發它。 我會使用MouseClick來檢查點擊是否發生在選定的項目上,即如下所示:
private void listBox1_MouseClick(object sender, MouseEventArgs e)
{
if (listBox1.SelectedIndex < 0 || !listBox1.GetItemRectangle(listBox1.SelectedIndex).Contains(e.Location))
MessageBox.Show("no click");
else
MessageBox.Show("click on item " + listBox1.SelectedIndex.ToString());
}
刪除鍵盤導航不是一種選擇。 –
這是不明確的,因爲你寫道:「我只想要點擊項目的行動」。在這個CAS中,我認爲tzup告訴你要走的路。 –
Winforms?如果是這樣,請添加標籤 –
@Merlyn,因爲我使用的是列表框,它應該很明顯。 –
不一定 - WPF也有一個ListBox控件。在我看到Merlyn的評論之前,我實際上是要回答你的問題。 – Eternal21