2009-02-06 4 views
0

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

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

Моя проблема в том, что когда я использую файлы ToolStripMenuItem_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 (МФА [я] .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

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

+0

Отправьте код того, как вы создаете sbuitems, и я посмотрю, смогу ли я помочь. – BFree

+0

Я добавил код к исходному сообщению сейчас. – sippa

0

Можете ли вы получить доступ к sub 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; 
}