2011-12-02 49 views
0

我的winforms應用程序中有TreeViewListView。問題在於,當用戶從樹形視圖中選擇一個節點時,需要一段時間才能填充listview(由於計算繁重!)。防止TreeView更改SelectedNode,直到填充ListView爲止

現在我想阻止任何節點被選中,除非已經填充了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; 
    }