【问题标题】:Mouse button in ToolStripMenuItemToolStripMenuItem 中的鼠标按钮
【发布时间】:2009-02-06 14:54:40
【问题描述】:

我有一个包含一些项目的上下文菜单。其中一个项目有一个子菜单(或任何名称),其中包含一些项目(取决于它找到的文件)。

我想要做的是,当我左键单击其中一个子项时,我希望发生一件事,而当我右键单击时,我希望发生另一件事。

我的问题是,当我使用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()));
}

对于这些项目,我希望能够根据我使用的鼠标按钮做不同的事情

【问题讨论】:

    标签: c# winforms mouse toolstrip


    【解决方案1】:
     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:你正在编辑:

    问题是,您只是在说 new ToolStripMenuItem(IpA[i].ToString()) 而没有保留对它的引用。您需要这样做:

     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.
        }
    

    【讨论】:

    • 问题是我在运行时创建子项目或者你怎么称呼它。就像它搜索一些文件一样,如果找到它们,它会为每个文件创建一个项目。所以我不能像你的例子那样做。
    • 发布您如何创建 sbuitems 的代码,我会看看是否可以提供帮助。
    • 编辑了我的帖子。看看有没有帮助。
    • 谢谢! subItem.MouseClick 只有一个小错误,但我将其更改为 subItem.MouseDown。但它现在正在工作,所以非常感谢你!我将此帖子标记为正确答案。
    • 糟糕,我的错误。我刚刚在我的答案中修复了它。很高兴它对你有用。
    【解决方案2】:

    您可以访问子菜单项吗?如果是这样,您可以处理子项目上的 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 1970-01-01
      • 2021-01-05
      相关资源
      最近更新 更多