2011-12-02 3 views
0

私はwinformsアプリケーションにTreeViewListViewを持っています。問題は、ユーザがツリービューからノードを選択したときに、リストビューがポピュレートされるまでに時間がかかることです(重い計算のため!)。リストビューが読み込まれるまでTreeViewがSelectedNodeを変更しないようにする

ここで、リストビューが設定されていない限り、ノードを選択しないようにしたいと思います。理由は、マウスを使用してノードを非常に高速に選択し続けるか、矢印キーをタップまたは押し続けると、リストにデータが入力されないためです。これはデータの使用状況を監視するためのものですから、この動作を防止したいと考えています。そのようなことをするための選択肢は何ですか?

+1

Sounds fishy。コードに対応するユーザーインターフェイスではなく、ユーザーを収容するユーザーインターフェイスを作成します。 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; 
    } 
関連する問題