2016-04-14 31 views
6

我在項目中有DropDownList。這DropDownList包含SelectedIndexChanged事件:下拉列表檢查索引是否通過代碼或選擇更改

private void cbo_SelectedIndexChanged(object sender, EventArgs e){......} 

是否有可能檢查索引是在代碼改變,如:

cbo.SelectedIndex = placering; 

,或者改變通過用戶交互發生了什麼?

回答

5

由於DropDownList沒有屬性Focused,因爲它是ComboBox控制在WinForms這並不容易。一種方法是添加自定義標誌,並在更改SelectedIndex屬性之前更改其值。內部事件處理程序,你可以檢查此標誌,並且重置其價值:在代碼中的某處

private volatile bool isAutoFired = false; 

然後:

isAutoFired = true; 
cbo.SelectedIndex = placering; 


private void cbo_SelectedIndexChanged(object sender, EventArgs e) 
{  
    if(!isAutoFired) 
    { 
     // event is fired by user 
    } 

    isAutoFired = false; 
} 
+0

謝謝,正是我在找的東西! – Moelbeck

1

你可以權之前刪除代碼中的事件處理程序可編程改變選擇,那麼之後再添加它。這是我最喜歡的方法。不需要標誌。

cbo.SelectedIndexChanged -= cbo_SelectedIndexChanged; 
cbo.SelectedIndex = 1 // or what you do to change the index 
cbo.SelectedIndexCHanged += new EventHandler(cbo_SelectedIndexChanged); 
相關問題