от
Как я могу узнать, какой узел в дереве списка контекстного меню был активирован? Например, щелкнув правой кнопкой мыши узел и выбрав опцию из меню. Я не могу использовать свойство деревьями'
SelectedNode
, так как узел только правой кнопкой мыши и не выбран.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.

10 Ответы

0 голосов
от
Как я могу узнать, какой узел в дереве списка контекстного меню был активирован? Например, щелкнув правой кнопкой мыши узел и выбрав опцию из меню. Я не могу использовать свойство деревьями'
SelectedNode
, так как узел только правой кнопкой мыши и не выбран.
0 голосов
от
Вы можете добавить событие щелчка мыши на дерево, а затем выберите правильный узел, используя GetNodeAt даны координаты мыши, предоставляемых MouseEventArgs.
void treeView1MouseUp(object sender, MouseEventArgs e)
{
    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);
        }
    }
}
0 голосов
от
Вот мое решение. Вставляем эту строку в событие NodeMouseClick из дерева:
 ((TreeView)sender).SelectedNode = e.Node;
0 голосов
от
Я найти стандартные окна дерево выбора поведения поведение очень раздражает. Например, если вы используете проводник и щелкните правой кнопкой мыши на узле и нажмите Свойства, в нем подчеркивается узел и показывает диалоговое окно свойств узла, по которой вы щелкнули. Но при возвращении из диалога, выделенный узел был узел ранее выделенных до тебя по щелчку правой кнопкой мыши. Я нахожу это вызывает проблемы с юзабилити, потому что я вечно все путают о том, как я действовал на правом узле. Поэтому во многих наших ГПИ, мы меняем выбранный узел дерева на правой кнопки мыши, так что нет никакой путаницы. Это не может быть так же, как стандартный iwndos приложение, как исследователь (и я, как правило, сильно модель нашего поведения GUI после стандартного окна приложения для usabiltiy причинам), я считаю, что этот случай исключение результатов в гораздо более пригодных деревьев. Вот некоторый код, который изменяет выбор в правой кнопкой мыши:
  private void tree_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
  {
     // only need to change selected note during right
0 голосов
от
Возрождая этот вопрос, потому что я считаю, это будет гораздо лучшим решением. Я вместо этого используйте событие
NodeMouseClick
.
void treeview_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    if( e.Button == MouseButtons.Right )
    {
        tree.SelectedNode = e.Node;
    }
}
0 голосов
от
Подобный ответ Маркуса, это было решение, которое я нашел работает для меня:
private void treeView_MouseClick(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        treeView.SelectedNode = treeView.GetNodeAt(e.Location);
    }
}
Вам не нужно показать контекстное меню сами, если вы установите его к каждому отдельному узлу:
TreeNode node = new TreeNode();
node.ContextMenuStrip = contextMenu;
Затем внутри эвента контекстное меню, в дерева.Свойство SelectedNode будет отражать правильный узел.
0 голосов
от
Это очень старый вопрос, но я все-таки нашел его полезным. Я использую сочетание некоторых из перечисленных выше ответов, потому что я не хочу, чтобы щелкнуть правой кнопкой мыши узел, чтобы стать selectedNode. Если у меня есть корневой узел выбран и вы хотите удалить один из его детей, я не хочу, чтобы ребенка отобрали, когда я удалить его (я также делаю некоторые работы по selectedNode, что я не хочу, чтобы это произошло по щелчку правой кнопки мыши). Вот мой вклад:
// Global Private Variable to hold right
0 голосов
от
Если вы хотите контекстного меню зависит от выбранного элемента вам лучше двигаться, я думаю, использовать код Jonesinator, чтобы выбрать элемент. В вашем контексте содержания меню, то можно зависит от выбранного элемента. Выбрав первый пункт, а не просто использовать его для контекстного меню дает несколько преимуществ. Первый заключается в том, что пользователь имеет визуальную индикацию, как на которую он нажал, и таким образом, какой пункт меню связан. Во-вторых, таким образом, это намного проще, чтобы сохранить совместимость с другими методами вызова контекстного меню (например, сочетания клавиш).
0 голосов
от
Вот как я это делаю.
private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
        e.Node.TreeView.SelectedNode = e.Node;
}
0 голосов
от
Другой вариант можно запускать С является глобальной переменной, которая имеет выбранный узел. Вам просто нужно использовать
TreeNodeMouseClickEventArgs
.
public void treeNode_Click(object sender, TreeNodeMouseClickEventArgs e)
{
    _globalVariable = e.Node;
}
Теперь у вас есть доступ к этому узлу и его свойства.
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...