2009-02-06 125 views
0

我有幾個項目的上下文菜單。其中一個項目有一個子菜單(或任何它被稱爲)與幾個項目(取決於它找到的文件)。ToolStripMenuItem中的鼠標按鈕

我想要做的是當我離開時點擊其中一個子項我想要發生一件事情,當我點擊右鍵我想要發生另一件事情。

我的問題是,當我使用filesToolStripMenuItem_DropDownItemClicked,我沒有得到任何MouseEventArgs的參數,所以我找不出哪個鼠標按鈕用於單擊該項目。

我試着在參數中自己添加它,但是我得到了一些錯誤。

有誰知道我該如何解決這個問題?所以我可以找出什麼鼠標按鈕被用來點擊子項目(這是一個ToolStripMenuItem)?

感謝

編輯:這裏是我用來創建子項目代碼:

IPHostEntry ipE = Dns.GetHostEntry(Dns.GetHostName()); 
IPAddress[] IpA = ipE.AddressList; 
for (int i = 0; i < IpA.Length; i++) 
{ 
     if (!IpA[i].ToString().Contains(":")) 
      cxItems.Items.Add(new ToolStripMenuItem(IpA[i].ToString())); 
} 

而對於我希望能夠做到根據不同的東西放在哪一個鼠標按鍵我用這些項目

回答

3
private void button2_Click(object sender, EventArgs e) 
    { 
     ToolStripMenuItem item1 = new ToolStripMenuItem("Menu1"); 
     ToolStripMenuItem subMenuitem1 = new ToolStripMenuItem("SubMenu"); 
     item1.DropDownItems.Add(subMenuitem1); 
     this.contextMenuStrip1.Items.Add(item1); 
     subMenuitem1.MouseDown += new MouseEventHandler(subMenuitem1_MouseDown); 
     this.contextMenuStrip1.Show(this.button2,new Point(0,0)); 
    } 

    void subMenuitem1_MouseDown(object sender, MouseEventArgs e) 
    { 
     //e.Button will determine which button was clicked. 
     MessageBox.Show(e.Button.ToString()); 
    } 

這應該有助於你開始。

RE:你是編輯:

的問題是,你只是說新ToolStripMenuItem(IPA的ToString [I]())沒有保持一個參考吧。以下是您需要這樣做的方法:

IPHostEntry ipE = Dns.GetHostEntry(Dns.GetHostName()); 
    IPAddress[] IpA = ipE.AddressList; 
    for (int i = 0; i < IpA.Length; i++) 
    { 
      if (!IpA[i].ToString().Contains(":")) 
      { 
       ToolStripMenuItem subItem = new ToolStripMenuItem(IpA[i].ToString()); 
       subItem.MouseDown += new MouseEventHandler(subItem_MouseDown); 
       cxItems.Items.Add(subItem); 
      } 
    } 

    void subMenuitem1_MouseDown(object sender, MouseEventArgs e) 
    { 
      //get a reference to the menu that was clicked 
      ToolStripMenuItem clickedMenu = sender as ToolStripMenuItem; 
      //e.Button will tell you which button was clicked. 
    } 
+0

問題是我在運行時創建子項或任何你所說的。就像它搜索一些文件一樣,如果它發現它們,它會爲每個文件創建一個項目。所以我不能像你的例子那樣做。 – sippa 2009-02-06 15:28:50

0

您是否可以訪問子菜單項?如果是這樣,你可以處理子項目上的MouseDown事件。

private System.Windows.Forms.ToolStripMenuItem optionToolStripMenuItem; 
private System.Windows.Forms.ToolStripMenuItem subitemToolStripMenuItem; 
private System.Windows.Forms.ToolStripMenuItem subItem2ToolStripMenuItem; 

public void init() 
{ 
    // 
    // optionToolStripMenuItem 
    // 
    this.optionToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 
    this.subitemToolStripMenuItem, 
    this.subItem2ToolStripMenuItem}); 
    this.optionToolStripMenuItem.Name = "optionToolStripMenuItem"; 
    this.optionToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 
    this.optionToolStripMenuItem.Text = "Option"; 
    // 
    // subitemToolStripMenuItem 
    // 
    this.subitemToolStripMenuItem.Name = "subitemToolStripMenuItem"; 
    this.subitemToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 
    this.subitemToolStripMenuItem.Text = "Subitem"; 
    // 
    // subItem2ToolStripMenuItem 
    // 
    this.subItem2ToolStripMenuItem.Name = "subItem2ToolStripMenuItem"; 
    this.subItem2ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 
    this.subItem2ToolStripMenuItem.Text = "SubItem2"; 
    this.subItem2ToolStripMenuItem.MouseDown += new System.Windows.Forms.MouseEventHandler(this.subItem2ToolStripMenuItem_MouseDown); 
    this.subItem2ToolStripMenuItem.Click += new System.EventHandler(this.subItem2ToolStripMenuItem_Click); 
} 

private bool wasRightClicked = false; 
private void subItem2ToolStripMenuItem_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Right) 
     wasRightClicked = true; 
}