Кнопка мыши в ToolStripMenuItem - PullRequest
       16

Кнопка мыши в ToolStripMenuItem

0 голосов
/ 06 февраля 2009

У меня есть контекстное меню с несколькими пунктами. Один из элементов имеет подменю (или как оно называется) с несколькими элементами (зависит от того, какие файлы он находит).

То, что я хочу сделать, - это когда я щелкаю левой кнопкой мыши по одному из подпунктов, я хочу, чтобы одна вещь произошла, а когда я щелкаю правой кнопкой мыши, я хочу, чтобы произошла другая вещь.

Моя проблема в том, что когда я использую filesToolStripMenuItem_DropDownItemClicked, я не получаю MouseEventArgs в параметре, поэтому я не могу определить, какая кнопка мыши использовалась для щелчка по элементу.

Я сам попытался добавить его в параметр, но затем получаю ошибку.

Кто-нибудь знает, как я могу это исправить? Итак, я могу узнать, какая кнопка мыши использовалась для щелчка по подпункту (который является ToolStripMenuItem)?

Спасибо

edit: вот код, который я использую для создания подпунктов:

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

И для этих предметов я хочу иметь возможность делать разные вещи в зависимости от того, какую кнопку мыши я использую

Ответы [ 2 ]

3 голосов
/ 06 февраля 2009
 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 [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.
    }
0 голосов
/ 06 февраля 2009

Можете ли вы получить доступ к подменю MenuItem? Если это так, вы можете обработать событие 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;
}
...