[英]Check which submenu item was clicked in context menu strip
網格控件中有一個 ContextMenuStrip。
我將其命名為 GridContextMenu。
GridContextMenu 使用以下代碼填充了 4-5 個項目:
gridcontextMenu.Items.Add(new ToolStripMenuItem
{
Name = Plants,
Text = Plants,
Tag = Plants,
Width = 100,
Image = <image source is put here>
});
gridcontextMenu.Items.Add(new ToolStripMenuItem
{
Name = Animals,
Text = Animals,
Tag = Animals,
Width = 100,
Image = <image source is put here>
});
對於工具條中的動物菜單,我通過以下方式添加了子菜單
(gridcontextMenu.Items[1] as ToolStripMenuItem).DropDownItems.Add("Tiger", image_source, new EventHandler(SubmenuItem_Click));
(gridcontextMenu.Items[1] as ToolStripMenuItem).DropDownItems.Add("Lion", image_source, new EventHandler(SubmenuItem_Click));
(gridcontextMenu.Items[1] as ToolStripMenuItem).DropDownItems.Add("Elephant", image_source, new EventHandler(SubmenuItem_Click));
在 SubmenuItem_Click 事件處理程序中,我需要知道點擊了哪個動物子菜單。
如何實現這一目標?
目前我有以下方式的事件處理程序代碼:
private void SubmenuItem_Click(object sender, EventArgs e)
{
}
在這種情況下如何檢查選擇了哪個動物子菜單的情況? 歡迎分享答案。
你可以這樣做:
private void SubmenuItem_Click(object sender, EventArgs e)
{
var clickedMenuItem = sender as MenuItem;
var menuText = clickedMenuItem.Text;
switch(menuText) {
case "Tiger":
break;
case "Lion":
break;
. ...
}
}
如果您應該將應用程序本地化,則可以使用Tag
來實現此目的。 此外, Tag
是一個對象,因此您可以在其中放置任何數據。 例如Enum
類型。
private void SubmenuItem_Click(object sender, EventArgs e)
{
var clickedMenuItem = sender as MenuItem;
EnumType item = (EnumType)clickedMenuItem.Tag;
switch(item) {
case TigeItem:
break;
case LionItem:
break;
...
}
}
當我發現其他答案都沒有在這里工作時,我去挖掘並找到了合適的解決方案。 這可能僅適用於.NET Framework 4+,但這是我發現的工作方式。
實際上, ContextMenuStrip
控件中的ItemClicked
事件在引發事件時將自身作為發送者和ToolStripItemClickedEventArgs
對象傳遞。 由於無法從ContextMenuStrip本身獲取單擊的項目,獲取此信息的唯一方法是詢問ToolStripItemClickedEventArgs
對象,並且單擊的項目作為ToolStripItem
對象駐留在那里。 然后,可以根據需要使用它來提取要在if / switch語句中使用的選項的名稱。 見下文:
要配置EventHandler:
...
contextMenuStrip1.ItemClicked += OnContextMenuItem_Clicked;
...
要處理事件並檢索所單擊項目的文本:
private void OnContextMenuItem_Clicked(object sender, ToolStripMenuItemClickedEventArgs e)
{
ToolStripItem clickedItem = e.ClickedItem;
string itemName = clickedItem.Text;
...
}
希望這有助於將來尋找這個答案:)
如果您已動態創建 ContextMenuStrip,則這是一種檢索 ToolStripMenuItem 索引的方法。 獲取枚舉值真的很有幫助。 我的上下文菜單是動態創建的,並填充了枚舉名稱。 我希望它可以幫助某人。 抱歉,發布時的格式仍然是新的。
`private void DynamiallyCreatedContextMenu_Click(object sender, EventArgs e)
{
ToolStripMenuItem item = sender as ToolStripMenuItem;
var parent = (item.Owner as ContextMenuStrip);
for (int i = 0; i < parent.Items.Count; i++)
{
if (item == parent.Items[i])
{
index = i;
break;
}
}
}`
private void SubmenuItem_Click(object sender, EventArgs e)
{
string clickedItemName=e.ClickedItem.Text;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.