работает над управлением представлением дерева в C # - PullRequest
0 голосов
/ 08 июня 2011

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

Короче говоря, как отключить контекстное меню для дерева

1 Ответ

3 голосов
/ 08 июня 2011

Нет варианта отключения концепции, я так думаю, но вы можете просто показать, что когда-либо context menu элементов необходимо, как указано ниже, если у вас определена древовидная структура, и у каждого вида дерева есть TAG, или вы можете определить свой собственный numbers для этого TAG. После этого попробуйте как следует

private void tvwACH_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        tvwACH.SelectedNode = e.Node;
        if (Convert.ToInt16(e.Node.Tag) == 3)
        {
            New.Text = "New";
            contextMenu.Items.Remove(New);
            contextMenu.Items.Add(Save);
            contextMenu.Items.Add(Saveas);
            contextMenu.Items.Add(Remove);
            contextMenu.Items.Remove(addEntry);
        }

        if (tvwACH.SelectedNode.Tag == null)
        {
            string str = tvwACH.SelectedNode.Parent.ToString().Substring(10);
            if (str == "BatchHeader")
            {
                contextMenu.Items.Remove(New);
                contextMenu.Items.Remove(Remove);
                contextMenu.Items.Remove(Save);
                contextMenu.Items.Remove(Saveas);
                contextMenu.Items.Add(addEntry);

            }
            else
            {
                contextMenu.Items.Add(New);
                New.Text = "Add new Batch";
                contextMenu.Items.Remove(Remove);
                contextMenu.Items.Remove(Save);
                contextMenu.Items.Remove(Saveas);
                contextMenu.Items.Remove(addEntry);

            }
        }
        if (Convert.ToInt16(tvwACH.SelectedNode.Tag) == 1)
        {
            contextMenu.Items.Add(New);
            New.Text = "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);
            New.Text = "Add new FileHeader";
            contextMenu.Items.Remove(Remove);
            contextMenu.Items.Remove(Saveas);
            contextMenu.Items.Remove(Save);
            contextMenu.Items.Remove(addEntry);

        }
    }

Согласно вашему требованию вы можете сделать следующее: вам просто нужно было отключить или включить элементы, которые вам не нужны, это также хорошо работает, но TAG важно для вас

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        treeView1.SelectedNode = e.Node;
        if (Convert.ToInt16(e.Node.Tag) == 1)
        {
            childToolStripMenuItem.Enabled = false;
            rootToolStripMenuItem.Enabled = true;
        }
        if (Convert.ToInt16(e.Node.Tag) == 2)
        {
            childToolStripMenuItem.Enabled = true;
            rootToolStripMenuItem.Enabled = false;
        }
    }
...