2016-03-05 55 views
1

因此,基本上我使用ComboBox.SelectedIndexChanged事件來填充另外5個ComboBox s,每個事件也有其自己的SelectedIndexChanged事件。如何防止ComboBox在填充時觸發另一個ComboBox的SelectedIndexChanged事件

問題是,當第一個SelectedIndexChanged事件觸發填補其餘..它也觸發其他ComboBox es'SelectedIndexChanged事件。

爲了防止這種情況發生,我在ComboBox es的其餘部分找到了使用事件SelectionChangeCommited的解決方案。

但現在,該事件(與SelectedIndexChanged不同)不會在第一次點擊ComboBox的項目時觸發...您需要在它做之前選擇該項目兩次或三次。

所以,我的問題是:有沒有辦法解決這些問題?

+0

如果子組合框'SelectedIndex'屬性在父'selectionChanged'觸發時更改爲-1,則可解析出何時執行操作。我認爲當沒有選中時,SelectedIndex會變爲-1。所以基本上忽略'Selectedindex = -1' –

回答

0

我會做局部變量,並將其設置爲時間SelectedIndexChanged應該被忽略

protected bool ignoreSelectedIndexChanged = false; 

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (ignoreSelectedIndexChanged) { return; } 

    //rest of code 
} 

在我看來,這比事件擺弄更明確。

在主ComboBox使用類似:

private void comboBoxMain_SelectedIndexChanged(object sender, EventArgs e) 
{    
    try 
    { 
     ignoreSelectedIndexChanged = true; 

     //comboBox1.SelectedIndex = 1; 
     //comboBox2.SelectedIndex = 2; 
     //comboBox3.SelectedIndex = 3; 
     //... 

    } 
    finally 
    { 
     ignoreSelectedIndexChanged = false; 
    } 
} 

SelectionChangedCommited可能是另一種方式如何做到這一點。但只有在用戶進行選擇時纔會被觸發,在某些情況下可能會受到限制。當有穹窿蟲發生時,它們應該不會開火。我親自避免它。

+0

謝謝你的回答,在這種情況下,我應該忘記SelectionChangedCommited事件還是將SelectedIndexChanged事件工作? –

+0

@watchDogMan我補充說明,如果有幫助。 –

+0

它工作得很好,再次感謝,簡單的解決方案,從來沒有想過壽(Y) –

1

在代碼中,之前你「補」的二次組合框,從他們的SelectedIndexChanged事件取消,然後重新訂閱時,「填充」代碼運行

+0

謝謝你的回答,我確實發現它有趣,請給我一個關於如何做到這一點的例子? –

0

使用標誌,例如
的情況下,你只有2個組合框

int flag =0; 

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    switch(flag) 
    { 
     case 0: 
      flag = 1; 
     break; 

     case 1: 
      // your code here 
      // after it you should set flag = 0 
     break; 

     default: 
     break; 
    } 

} 

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
{ 

    switch(flag) 
    { 
     case 0: 
      flag = 2; 
     break; 

     case 2: 
      // your code here 
      // after it you should set flag = 0 
     break; 

     default: 
     break; 
    }   
} 

就這樣根據組合框的數量,您正在使用。

相關問題