我的問題與此類似:How to prevent ListBox.SelectedIndexChanged event?,但我想問一個不同的方法。ListBox.SelectedIndexChanged - 您可以確定它是否是用戶啓動的?
有沒有一種簡單的方法來確定'SelectedIndexChanged'是否來自用戶,而不是通過代碼(例如ListBox.SelectedIndex = x)發起?
我的問題與此類似:How to prevent ListBox.SelectedIndexChanged event?,但我想問一個不同的方法。ListBox.SelectedIndexChanged - 您可以確定它是否是用戶啓動的?
有沒有一種簡單的方法來確定'SelectedIndexChanged'是否來自用戶,而不是通過代碼(例如ListBox.SelectedIndex = x)發起?
據我所知,不,沒有簡單的內置方法。我已經能夠做的最好的就是在代碼改變之前設置一個標誌,然後讓事件處理程序重置標誌並返回。
我想你可以開始檢查調用堆棧,看看它是否在你自己的代碼中的某個地方發起,但我不確定它值多少錢。
屬性更改偵聽器不區分屬性更改的原因。這是一個常見問題。設置一個標誌是做到這一點的方法。
我的確希望有一種方法可以在不觸發屬性更改事件的情況下設置值。但是,人們爭辯說它打破了整個面向對象的模型,因爲它有效地允許你直接改變一個字段,而不使用屬性。
對我來說,'SelectionChangeCommitted'事件更適合我的目的。它會在選擇下拉列表中的選擇時觸發。這是最終用戶啓動更改時處理特定情況的最簡單方法。 SelectedIndexChanged是捕獲所有情況。
優秀的答案。不幸的是,對我來說,Visual WebGUI並沒有實現這個事件(VWG就像WinForms,但有時候不是)。而且,ListBox的甚至ToolStrip上的ComboBox也會出現同樣的問題。儘管如此,仍然是一個很好的答案。謝謝(你的)信息。 – JustLooking 2010-07-21 21:56:52
+1寫作我即將到來:D – Kyra 2010-06-18 17:33:04
這就是我的想法,但我抱着希望。因爲,男人,我討厭跳過籃筐,不得不跳過(設置標誌等)。需要點擊click和checkchanged(對於單選按鈕)。除非有人告訴我們,否則你很快會有一個綠色的複選標記!謝謝。 – JustLooking 2010-06-18 17:37:37