2014-01-19 160 views
-1

我在窗體上有2個列表框,但我只希望能夠在兩個窗體之間進行單一選擇,我會怎麼做呢?多個列表框,一個選擇

我,當然,第一次嘗試這樣做...

Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged 
    ListBox2.ClearSelected() 
End Sub 

Private Sub ListBox2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox2.SelectedIndexChanged 
    ListBox1.ClearSelected() 
End Sub 

但由於導致要更改選定的索引它清除你剛纔的選擇,以及...

謝謝任何幫助!

+0

我想你可以從EventArgs中獲得選定的索引。因此,您清除兩個列表框,然後將最後一個列表框設置爲您在清除兩個列表框之後從eventargs獲得的數據。 –

+0

這將被視爲選擇更改並創建一個無限循環。 –

+0

您可以檢查設定值是否被清除,如果清除,您只需將事件設置爲已處理。沒有循環。 –

回答

2

可以測試的原因爲什麼選定的指數變化,這樣的事情:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { 
    // If listBox2 focused i.e. user clicked list box2 - do nothing: 
    // one should not try to clear list box2 selection 
    if (listBox2.Focused) 
    return; 

    listBox2.ClearSelected(); 
} 

private void listBox2_SelectedIndexChanged(object sender, EventArgs e) { 
    // If list box1 is in focus that means that user just have selected itme there; 
    // so, do nothing: we shouldn't erase user's selection 
    if (listBox1.Focused) 
    return; 

    listBox1.ClearSelected(); 
} 
1

首先,你的問題被標記爲C#,但代碼示例是在VB。 其次,我會如下做它在C#:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    listBox2.SelectedIndexChanged -= new System.EventHandler(this.listBox2_SelectedIndexChanged); 
    listBox2.ClearSelected(); 
    listBox2.SelectedIndexChanged += new System.EventHandler(this.listBox2_SelectedIndexChanged); 

} 

做同樣與其他事件處理程序。

+0

做到這一點的一種方式,看起來很清楚:) –