C# ToolStripMenuItem中的鼠标按钮
我有一个有几个项目的上下文菜单。其中一个项目有一个子菜单(或其他名称),其中包含一些项目(取决于找到的文件) 我想做的是,当我左键单击其中一个子项时,我希望一件事发生,当我右键单击时,我希望另一件事发生 我的问题是,当我使用FileToolStripMenuItem\u DropDownItemClicked时,参数中没有任何MouseeEventArgs,因此我无法找到用于单击项目的鼠标按钮 我尝试将其添加到参数中,但后来出现了一些错误 有人知道我怎么解决这个问题吗?因此,我可以找到单击子项(ToolStripMenuItem)时使用的鼠标按钮是什么 谢谢 编辑:以下是我用于创建子项的代码:C# ToolStripMenuItem中的鼠标按钮,c#,winforms,mouse,toolstrip,C#,Winforms,Mouse,Toolstrip,我有一个有几个项目的上下文菜单。其中一个项目有一个子菜单(或其他名称),其中包含一些项目(取决于找到的文件) 我想做的是,当我左键单击其中一个子项时,我希望一件事发生,当我右键单击时,我希望另一件事发生 我的问题是,当我使用FileToolStripMenuItem\u DropDownItemClicked时,参数中没有任何MouseeEventArgs,因此我无法找到用于单击项目的鼠标按钮 我尝试将其添加到参数中,但后来出现了一些错误 有人知道我怎么解决这个问题吗?因此,我可以找到单击子项(
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()));
}
IPHostEntry ipE=Dns.GetHostEntry(Dns.GetHostName());
IPAddress[]IpA=ipE.AddressList;
对于(int i=0;i
对于这些项目,我希望能够根据我使用的鼠标按钮做不同的事情
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());
}
这应该有助于你开始
回复:您正在编辑:
问题是,您只是说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.
}
IPHostEntry ipE=Dns.GetHostEntry(Dns.GetHostName());
IPAddress[]IpA=ipE.AddressList;
对于(int i=0;i
这应该有助于你开始
回复:您正在编辑:
问题是,您只是说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.
}
IPHostEntry ipE=Dns.GetHostEntry(Dns.GetHostName());
IPAddress[]IpA=ipE.AddressList;
对于(int i=0;i
您可以访问子菜单项吗?如果是这样,您可以处理子项上的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;
}
你能访问子菜单项吗?如果是这样,您可以处理子项上的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;
}
问题是,我在运行时创建子项,或者你称之为子项的任何东西。就像它搜索一些文件一样,如果找到它们,它会为每个文件创建一个项目。所以我真的不能像你的例子那样。发布你如何创建sbuitems的代码,我会看看我是否能帮上忙。编辑我的帖子。看看能不能帮上忙,谢谢!subItem.MouseClick只有一个小错误,但我改为subItem.MouseDown。但它现在起作用了,非常感谢!我把这篇文章标为正确答案。哎呀,我错了。我只是在回答中修正了它。很高兴它能为您工作。问题是我正在运行时创建子项,或者不管您怎么称呼它。就像它搜索一些文件一样,如果找到它们,它会为每个文件创建一个项目。所以我真的不能像你的例子那样。发布你如何创建sbuitems的代码,我会看看我是否能帮上忙。编辑我的帖子。看看能不能帮上忙,谢谢!subItem.MouseClick只有一个小错误,但我改为subItem.MouseDown。但它现在起作用了,非常感谢!我把这篇文章标为正确答案。哎呀,我错了。我只是在回答中修正了它。很高兴它对你有用。