2009-02-06 92 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; 
}