2014-01-19 5 views
-1

양식에 두 개의 목록 상자가 있습니다. 그러나 둘 사이에 하나의 선택 만 할 수있게하려면 어떻게해야합니까?여러 개의 목록 상자, 하나의 선택

나는, 물론, 그 변경 될 선택된 인덱스가 발생하기 때문에

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

한 가지 방법은 매우 명확하게 보인다 :) –

관련 문제