2011-08-24 129 views
1

我有3個列表框,當選擇其中1個時,我想取消選擇其他列表框。我怎樣才能做到這一點? 我曾嘗試將聚焦屬性設置爲false,但c#不允許分配給聚焦屬性。如何在選擇1時取消選擇其他列表框

+0

爲什麼要更改焦點屬性?如果要更改的是選擇。這裏是焦點在3.5 http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus(v=VS.90).aspx – Tipx

回答

2

假設您有三個列表框,請執行以下操作。當特定列表框改變選擇時,此代碼將清除每個其他列表框的選擇。您可以通過設置其SelectedIndex = -1來清除列表框選擇。

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (listBox1.SelectedIndex > -1) 
    { 
     listBox2.SelectedIndex = -1; 
     listBox3.SelectedIndex = -1; 
    } 
} 

private void listBox2_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (listBox2.SelectedIndex > -1) 
    { 
     listBox1.SelectedIndex = -1; 
     listBox3.SelectedIndex = -1; 
    } 
} 

private void listBox3_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (listBox3.SelectedIndex > -1) 
    { 
     listBox1.SelectedIndex = -1; 
     listBox2.SelectedIndex = -1; 
    } 
} 

if (listBox#.SelectedIndex > -1)是必要的,因爲通過代碼設置列表框中的SelectedIndex也將觸發其SelectedIndexChanged事件,否則就會導致所有的列表框清除選擇他們中的任何一個時間。

編輯:

或者,如果您只有形式這三個列表框,那麼你可以合併成一個方法。將所有三個列表框鏈接到此事件方法:

private void listBox_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    ListBox thisListBox = sender as ListBox; 
    if (thisListBox == null || thisListBox.SelectedIndex == 0) 
    { 
     return; 
    } 

    foreach (ListBox loopListBox in this.Controls) 
    { 
     if (thisListBox != loopListBox) 
     { 
      loopListBox.SelectedIndex = -1; 
     } 
    } 
} 
相關問題