2011-12-02 2 views
0

winforms 응용 프로그램에 TreeViewListView이 있습니다. 문제는 사용자가 트리 뷰에서 노드를 선택할 때 목록보기가 채워지는 데 시간이 오래 걸리는 것입니다 (많은 계산으로 인해!).ListView가 채워질 때까지 TreeView가 SelectedNode를 변경하지 못하도록 함

이제 listview가 채워지지 않은 경우 노드를 선택하지 못하게하고 싶습니다. 이유는 마우스를 사용하여 노드를 매우 빠르게 선택하거나 화살표 키를 길게 누르면 목록이 채워지지 않기 때문입니다. 이것은 데이터 사용량을 모니터링하기위한 것이므로이 동작을 방지하려고합니다. 그런 일을 할 수있는 선택권은 무엇입니까?

+1

비명 소리가납니다. 코드를 수용 할 수있는 사용자 인터페이스 대신 사용자를 수용 할 수있는 사용자 인터페이스를 작성하십시오. BackgroundWorker.CancelAsync()는이를 도와줍니다. –

+0

그래, 나도 알아,하지만 난 아직 진보가 아니다. P –

답변

1

플래그를 사용하여 ListView를 채우는 위치를 추적하고 TreeView의 BeforeSelect 이벤트를 사용할 수 있습니다. ListView가 여전히 채워지는 경우 BeforeSelect 이벤트 처리기가 이벤트를 취소합니다.

private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e) 
    { 
     if (_loading) 
      e.Cancel = true; 
    } 

    bool _loading = false; 
    void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 
    { 
     _loading = true; 
     // ListView populating 
     _loading = false; 
    } 
관련 문제