2011-08-24 89 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; 
     } 
    } 
} 
相关问题