Как я могу показать контекстное меню, только когда пользователь щелкнул корневой узел в TreeView? - PullRequest
2 голосов
/ 17 апреля 2011

У меня есть TreeView и контекстное меню. Я хочу показать контекстное меню ТОЛЬКО когда я щелкаю правой кнопкой мыши по узлу ROOT, а не по дочерним узлам.

Это то, что я имею до сих пор. Это показывает контекстное меню, даже когда я щелкаю правой кнопкой мыши по дочерним узлам. Как я могу изменить это так, чтобы меню отображалось только когда я щелкаю правой кнопкой мыши по корневому узлу? Возможно ли это?

if(e.Button == MouseButtons.Right)
{
    // Select the clicked node
    treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y);

    if(treeView1.SelectedNode != null)
    {
        myContextMenuStrip.Show(treeView1, e.Location)
    }
}

Ответы [ 3 ]

5 голосов
/ 17 апреля 2011

Да, это возможно, но вам нужно добавить некоторую логику в свои операторы if, которая проверяет, что узел, по которому щелкнул пользователь, является корневым узлом.

Но как мы узнаем, является ли это корневым узлом? Хорошо, продумав это, мы можем определить корневой узел как тот, у которого нет родителей. Таким образом, вы можете просто проверить Parent свойство TreeNode и убедиться, что оно null.

Измените ваш код, чтобы он выглядел примерно так:

if (e.Button == MouseButtons.Right)
{
    // Select the clicked node
    treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y);

    if (treeView1.SelectedNode != null && treeView.SelectedNode.Parent == null)
    {
        myContextMenuStrip.Show(treeView1, e.Location)
    }
}

Вы хотите сохранить проверку того, что сам узел не является null, потому что вы не хотите показывать контекстное меню, когда они еще не нажали на узле, но вам нужно добавьте проверку для родителя, потому что она говорит вам, является ли это корневым узлом. Способ, которым вы указываете, что программно использует логическое И, который является оператором && в C #.

0 голосов
/ 30 ноября 2014

Вы также можете использовать свойство Level:

http://msdn.microsoft.com/EN-US/library/386b25wy(v=VS.110,d=hv.2).aspx

If e.Button = MouseButtons.Right Then
  ' Select the clicked node
  treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y)

  If treeView1.SelectedNode.Level = 0 Then
    myContextMenuStrip.Show(treeView1, e.Location)
  End If
End If
0 голосов
/ 17 апреля 2011

Убедитесь, что узел, на который вы щелкнули, является корневым, а не проверяется, является ли он null.

...