簡體   English   中英

為什么ComboBox.SelectedIndexChanged事件在加載表單之前觸發三次?

[英]Why does ComboBox.SelectedIndexChanged event fire three times before form load?

我對組合框數據綁定有一點問題。 我有一個具有一個組合框的表單,並且根據ComboBox中的選擇,表單應該填充數據。 我使用SelectedIndexChanged事件而不是SelectionChangeCommitted事件,因為我希望能夠在加載表單時用ComboBox中第一項的數據填充表單。 我嘗試了2個解決方案:

  1. 在數據綁定之前添加事件處理程序。

該解決方案幾乎可以正常工作。 它選擇第一個ComboBox項並用相關數據填充表單,但是由於某種原因,綁定數據時此事件將觸發3次,這將導致表單加載速度變慢,因為從數據庫中調用了某些數據,並且基本上此數據已加載3次。

  1. 在數據綁定之后添加事件處理程序。

盡管在加載表單后在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.

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