2

TreeViewがあり、2つ必要です。

  • 特定のノードをクリックした場合の右クリックサポート。
  • ツリーの他の場所(ノードがない場所)をクリックした場合の右クリックのサポート。

2つのオプションは両方とも私に異なるを与えるでしょうContextMenuStrip
私の2つのプログラムは、このような両方のタイプのクリックをサポートするようになりました。

特定のノードのクリック:

var someNode = e.Node.Tag as SomeNode;
if (someNode != null)
{
   someContextMenu.Show(someTree, e.Location);
   return;
}

ツリーのどこでもクリック:

ここに画像の説明を入力してください

問題は、ノードをクリックしたか、からの空白の場所をクリックしたかを確認する前にAnywhere on the tree click、イベントが発生することです。 その動作をどのように変更できるかについてのアイデアはありますか?TreeView

4

2 に答える 2

2

WinFormについて質問していると仮定します。

TreeView.HitTestメソッドを使用して、ノードにヒットしたかどうかを知ることができるTreeViewHitTestInfoを返すことができます。

于 2012-08-29T19:30:26.703 に答える
0
private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        TreeViewHitTestInfo info = treeView1.HitTest(e.Location);
        treeView1.SelectedNode = info.Node;

        if (info.Node == null)
        {
            contextMenuStrip1.Show(Cursor.Position);
        }
        else
        {
            contextMenuStrip2.Show(Cursor.Position);
        }
    }
}

または、必要に応じてマウスアップイベント。TreeViewHitTestInfoクラスの代わりにGetNodeAt(e.Location)を使用することもできます。

于 2012-08-29T20:18:51.503 に答える