6

TreeView親ノードを持つがあります: Node0。私は3を追加しsubnodesます:

Node01
Node02
Node03

popup menu各サブノードに関連付けられているがあります。

私の問題:サブノードの1つを直接右クリックすると、ポップアップが表示されません。したがって、最初にサブノードを選択し、右クリックしてポップアップを表示する必要があります。

  1. 特定のサブノードを直接右クリックしてPopupMenuを開くようにコードを変更するにはどうすればよいですか?
  2. popupMenuOpenMeには、リスト内のメニューのみがあります。このメニューをクリックすると、ウィンドウが開くはずであり、このウィンドウは、クリックしたサブメニューに関連付けられている必要があります。右クリックサブメニューのイベントを取得してフォームを表示するにはどうすればよいですか?

編集:

これを見てください

private void modifySettingsToolStripMenuItem_Click(object sender, EventArgs e)
    {
        try
        {
            String s = treeView1.SelectedNode.Text;
            new chartModify(s).ShowDialog();
        }
        catch (Exception er)
        {
            System.Console.WriteLine(">>>" + er.Message);
        }
    }

この行String s = treeView1.SelectedNode.Text;は、右クリックされたノードではなく、選択されたノードの名前を取得します。

したがって、ここでは、このコードを次のように変更する必要があります。

private void treeview1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
                MessageBox.Show(e.Node.Name);
        }

私はそれを次のように変更します:

try
        {
            TreeNodeMouseClickEventArgs ee;
            new chartModify(ee.Node.Name).ShowDialog();
        }

しかし、それは機能しません:Error:Use of unassigned local variable 'ee'

編集#2:最終的に解決策を得た

public string s;
private void modifySettingsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                new chartModify(s).ShowDialog();
            }
            catch (Exception er)
            {
                System.Console.WriteLine(">>>" + er.Message);
            }
        }

その後

private void treeview1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                s = e.Node.Name;
                menuStrip1.Show();
            }
        }

それは動作します、
ありがとう

4

2 に答える 2

25

クリックされたボタンとノードを取得するためにNodeMouseClick使用するイベントを使用してみることができます。TreeNodeClickEventArgs

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    if(e.Button == MouseButtons.Right)
        MessageBox.Show(e.Node.Name);
}

ポップアップを表示するようにコードを変更し、フォームを作成しました

public partial class Form1 : Form
{
    string clickedNode;
    MenuItem myMenuItem = new MenuItem("Show Me");
    ContextMenu mnu = new ContextMenu();
    public Form1()
    {
        InitializeComponent();
        mnu.MenuItems.Add(myMenuItem);
        myMenuItem.Click += new EventHandler(myMenuItem_Click);
    }

    void myMenuItem_Click(object sender, EventArgs e)
    {
        Form frm = new Form();
        frm.Text = clickedNode;
        frm.ShowDialog(this);
        clickedNode = "";
    }

    private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            clickedNode = e.Node.Name;
            mnu.Show(treeView1,e.Location);
        }
    }
}
于 2013-01-08T06:05:44.550 に答える
2

これにより、右クリックしたときに特定のマウス ポイントにツリー ノードが表示されます。

if(e.Button == MouseButtons.Right)
        {
            TreeNode destinationNode = ((TreeView)sender).GetNodeAt(new Point(e.X, e.Y));
            //Do stuff
        }

ここから、特定のポップアップ メニューを開くことができるはずです。

于 2013-01-08T05:55:36.593 に答える