Как я могу исправить проблему для контекстного меню для Treeview нажмите - PullRequest
0 голосов
/ 02 декабря 2010

Мой код для открытия контекстного меню при щелчке правой кнопкой мыши по дереву выглядит следующим образом

private void contextMenu_Opening(object sender, CancelEventArgs e)
    {
        if (Convert.ToInt16(tvwACH.SelectedNode.Tag) == 1)
        {
            contextMenu.Items.Add(New);
            contextMenu.Items.Remove(Remove);
            contextMenu.Items.Remove(Saveas);
            contextMenu.Items.Remove(Save);
            contextMenu.Items.Remove(addEntry);
        }
        if (Convert.ToInt16(tvwACH.SelectedNode.Tag) == 2)
        {
            contextMenu.Items.Add(New);
            contextMenu.Items.Remove(Remove);
            contextMenu.Items.Remove(Saveas);
            contextMenu.Items.Remove(Save);
            contextMenu.Items.Remove(addEntry);
            New.Text = "Add FileHeader";
        }
        if (Convert.ToInt16(tvwACH.SelectedNode.Tag) == 3)
        {
            contextMenu.Items.Remove(New);
            contextMenu.Items.Add(Save);
            contextMenu.Items.Add(Saveas);
            contextMenu.Items.Remove(Remove); //Added later
            contextMenu.Items.Remove(addEntry);
        }
        if (tvwACH.SelectedNode.Parent != null)
        {
            string str = tvwACH.SelectedNode.Parent.ToString().Substring(10);
            if (str == "BatchHeader")
            {
                contextMenu.Items.Remove(New);
                contextMenu.Items.Remove(Save);
                contextMenu.Items.Remove(Remove);
                contextMenu.Items.Remove(Saveas);
                contextMenu.Items.Add(addEntry);
            }
        }

, а также мышь для просмотра дерева следующим образом

 private void tvwACH_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            contextMenu.Show(tvwACH, e.Location);
        }
        location = e.Location;
    }

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

Любая помощь, пожалуйста

1 Ответ

1 голос
/ 02 декабря 2010

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

Вы можете определить узел, который находится в определенной точке, используя HitTest метод , предоставленный TreeView. Например, вы можете изменить текущий обработчик события MouseDown, включив в него следующий код:

private void tvwACH_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        if (tvwACH.HitTest(e.Location).Node != null)
        {
            contextMenu.Show(tvwACH, e.Location);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...