2013-01-08 74 views
4

我有一個TreeView父節點:Node0。我加3 subnodesC#右鍵單擊TreeView節點

Node01 
Node02 
Node03 

我有一個popup menu是聯想到每個子節點。

我的問題:如果我直接右鍵單擊其中一個子節點,我的彈出窗口不會顯示。所以我必須先選擇子節點,然後右鍵單擊以顯示彈出窗口。

  1. 如何更改代碼,以便直接右鍵單擊特定的子節點打開PopupMenu?
  2. popup菜單隻有OpenMe菜單在列表中。當點擊這個菜單時,應該打開一個窗口,並且這個窗口應該與我點擊的子菜單關聯。如何獲取右鍵單擊子菜單的事件並使用它顯示Form?

編輯:

看這個

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(); 
      } 
     } 

它的工作原理,
感謝

+3

哪裏是你的代碼,右鍵點擊? – ryadavilli

+2

哪種技術?的WinForms?的WebForms? ASP.NET MVC? WPF? –

回答

17

您可以嘗試使用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); 
     } 
    } 
} 
+0

沒有我想要的是顯示與所選節點相關的PopUpMenu框。首先右鍵單擊某個節點,然後選擇ShowMe以顯示一個窗體,並將標題設置爲右鍵單擊節點的名稱。 – DeathCoder

+1

@DeathCoder是Winforms還是Wpf? –

+0

這裏是Winforms – DeathCoder

2

這會給你在一個特定的鼠標指向,當你右鍵點擊樹節點。

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

從這裏你應該可以打開一個特定的彈出菜單。

+0

沒有我想要的是顯示與所選節點相關的PopUpMenu框。首先右鍵單擊某個節點,然後選擇ShowMe以顯示一個窗體,並將標題設置爲右鍵單擊節點的名稱。 – DeathCoder