2017-09-12 84 views
0

我有一個Winform的組合框,當然我需要知道用戶何時選擇一個選項。問題是,每個事件類型都有其缺點:C#Winform - 檢測兩個事件是否被一個用戶操作觸發

當選擇發生在關閉的下拉列表中(但通過聚焦組合框並使用鍵盤箭頭向上和向下移動)時textChanged不會被觸發。

當下拉列表打開時,用戶通過鍵盤箭頭上下移動SelectionChangeCommittedHandler,然後單擊組合框標題或外部鼠標。

SlectedIndexChangedHandler會被觸發太多次,所以它會在網絡連接較弱的情況下減慢程序。

因此,我認爲要做到這一點的解決方案:

註冊到兩個SelectionChangeCommittedHandler和框TextChanged事件和案件都被解僱了,忽略了其中的一個。問題是我不知道如何檢測這種情況(=來自一個用戶操作的兩個事件)。

我很高興知道如何檢測,或者如果有的話,聽到更好的解決方案。

+2

「SlectedIndexChangedHandler被觸發了太多次,所以它會在網絡連接較弱的情況下減慢程序的速度。」 - 如果網絡輸入/輸出阻塞你的用戶界面,那麼你總是「做錯了」......你究竟在做什麼?你的目標是什麼? – Fildor

+0

@Fildor關於在一個組合框中選擇值,我使用選定的值作爲參數調用Web服務來獲取ad hoc數據,以填充下一個組合框。有沒有更好的方法來做到這一點? – Yehezkel

+0

取決於一些要點:1.組合包含多少物品? 2.是否足夠快,只有在提交選擇後才提取? 3.依賴組合中有多少項目? ......我的目標是:是否有意義,例如「預取」第二個Combobox的所有可能的項目列表?你是否真的需要在每次改變時獲取物品? (=你需要*看到*項目在2組合中滾動時改變組合)? – Fildor

回答

1

有點骯髒,但我試圖給你一個解決方案:聽兩個事件,並標記一個時間戳,每次他們其中一個火災。一旦事件觸發,請檢查當前時間與上次操作時間,並根據您決定的容差,只有在自上次操作後經過了一定時間時才繼續執行程序邏輯。

我想象一下100毫秒左右就足夠了,不過你自己試試。

相關問題