2017-03-20 47 views
0

的SelectIndex下面是我的代碼,List_sheet_name是一個組合框設置組合框調用SelectedIndexChanged事件

List_sheet_name.Items.Clear(); 
      List_sheet_name.Items.Insert(0,"Select a table from Sheet"); 
      for (int i = 0; i < Sheets.Rows.Count; i++) 
      { 
       List_sheet_name.Items.Add(Sheets.Rows[i]["TABLE_NAME"].ToString()); 
      } 
      List_sheet_name.SelectedIndex = 0; 
      //List_sheet_name.SelectedIndex = List_sheet_name.FindStringExact("Select a table from Sheet"); 

設置SelectIndex爲零(在最後兩行)後,它會自動調用SelectedIndexChanged事件了。有人能告訴我爲什麼會發生這種情況嗎?

+0

你想達到什麼目的? – ehh

+0

一個簡單的任務 - 將「從表中選擇表格」設置爲默認值 – Saurabh

+0

因此,使用SelectIndex是一個有效的選項,您在SelectedIndexChanged中有什麼不希望它被引發的內容? – ehh

回答

1

按照MSDN之前,該事件反應的所有SelectedIndex變化。如果將索引更改爲與前一個值相等的新值,則該事件不會再次被觸發,您需要手動調用它。

如果你不希望SelectedIndexChanged事件被調用設置SelectedIndex時,你應該在SelectedIndexChanged事件發送對象(這是ComboBox)是否被集中檢查。

private void YourComboBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (!(sender as ComboBox).Focused) 
     return; 

    // ...your code 
} 
+0

如何檢查發件人對象是否關注? – Saurabh

+0

我編輯了我的答案。 –

+0

令人驚歎的,謝謝。好的代碼 – Saurabh

1

最初,它是-1。如果你設置爲0,那麼SelectedIndexChanged將被調用。

每當您將其設置爲ANOTHER值時,SelectedIndexChanged將被引發。對於集從代碼隱藏,你可以使用一個變量BOOL _codeBehind,將其設置你改變的SelectedIndex和評估的事件處理程序

private bool _cmbSelIdxIntern = false; 

void YourMeth() 
{ 
    _cmbSelIdxIntern = true; 
    cmbTest.SelectedIndex = 0; 
    _cmbSelIdxIntern = false; 
} 

private void cmbTest_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (_cmbSelIdxIntern) 
    { 
     return; 
    } 
} 
+0

試圖將它設置爲-1,但它沒有設置所需的值 – Saurabh

相關問題