4

現在選択されているノードに基づいて別のフォームを開くために使用したい WinForms TreeView コントロールがあります。ノードを Ctrl キーを押しながらクリックすると、その別のフォームが開きます。

現在、DoubleClick ハンドラーで他​​のフォームを開くと(そして明らかにノードをダブルクリックすると)、希望どおりに動作します。ただし、Click (または MouseClick) ハンドラーを使用して、Control キーを押したときに他のフォームを開くと、他のフォームは正しく開きますが、元のフォームにフォーカスが戻ります。

他のフォームを開いた後、フォーカスが元のフォームに戻らないようにするにはどうすればよいですか (まだフォームを開いたままにしたいのですが)。Click ハンドラーと DoubleClick ハンドラーの動作が異なるのはなぜですか?

4

1 に答える 1

8

TreeView は、イベントが返された後にフォーカスを取り戻します。とてもうるさい。トリックを使用できます: Control.BeginInvoke でイベントのアクションを遅らせます。

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
  this.BeginInvoke(new TreeNodeMouseClickEventHandler(delayedClick), sender, e);
}
private void delayedClick(object sender, TreeNodeMouseClickEventArgs e) {
  // Now do your thing...
}

DelayClick メソッドは、TreeView のすべてのイベントの実行が終了し、プログラムがアイドル状態になり、メッセージ ループに再び入るとすぐに実行されます。

于 2009-02-20T22:00:32.067 に答える