[英]Winforms: Which event to fire? combobox.selectedindexchanged OR bindingsource.currentchanged
[英]Why does ComboBox.SelectedIndexChanged event fire three times before form load?
我對組合框數據綁定有一點問題。 我有一個具有一個組合框的表單,並且根據ComboBox中的選擇,表單應該填充數據。 我使用SelectedIndexChanged事件而不是SelectionChangeCommitted事件,因為我希望能夠在加載表單時用ComboBox中第一項的數據填充表單。 我嘗試了2個解決方案:
該解決方案幾乎可以正常工作。 它選擇第一個ComboBox項並用相關數據填充表單,但是由於某種原因,綁定數據時此事件將觸發3次,這將導致表單加載速度變慢,因為從數據庫中調用了某些數據,並且基本上此數據已加載3次。
盡管在加載表單后在ComboBox中正確選擇了第一項,但該解決方案無法像我想要的那樣工作,因為它沒有用相關數據填充表單。 這主要是因為我在完成數據綁定之后添加了事件處理程序(用數據填充表單)。 此解決方案的優點是事件不會連續觸發3次,但這是此解決方案的唯一優點,因為該表單未填充預期的相關數據。
有誰知道為什么此事件被觸發3次? 作為解決問題的一種可能方法,我可以調用該方法,該方法應在數據綁定之后由事件觸發,然后將事件處理程序添加到ComboBox,但這看起來像是一種駭人聽聞的工作方式。 如果有人可以提供更好的方法來完成任務,我將非常高興。 但是,如果我的解決方案恰好是唯一/最好的處理方式,那么有人可以告訴我在數據綁定期間多次觸發事件的技術原因嗎?
編輯:我想我已經找到了原因和解決方案。 事件被觸發3次的原因不是數據綁定觸發了3次-而是因為分配DisplayMember和ValueMember也觸發了該事件。
之前:
combo.SelectedIndexChanged += new System.EventHandler(this.combo_SelectedIndexChanged);
combo.DataSource = getItems().ToList();
combo.ValueMember = "Key";
combo.DisplayMember = "Value";
后:
combo.ValueMember = "Key";
combo.DisplayMember = "Value";
combo.SelectedIndexChanged += new System.EventHandler(this.combo_SelectedIndexChanged);
combo.DataSource = getItems().ToList();
如果在同時加載winform和combobox的數據源時出現此問題,請檢查combobox.Focused值。 如果在加載表單時定義了數據源,則沒有進行真正的選擇,因此對象沒有焦點。 因此,在selectionChanged事件中只需添加即可。 if(combobox.Focused == true){//做某事}
然后問題就解決了...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.