C#Windows窗体-MenuItem单击事件-获取MenuItem文本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#Windows窗体-MenuItem单击事件-获取MenuItem文本相关的知识,希望对你有一定的参考价值。

如何获得已单击的任何给定菜单项的文本?

菜单是动态填充的,因此似乎仅限于此:

 Menu.MenuItems.Add(new MenuItem("MenuName", new EventHandler(menu_click)));

不幸的是,我看不到Eventhandler具有已单击的菜单项的文本/名称。

有没有解决的办法?

答案

这是什么类型的菜单?

因为您似乎将事件直接附加到菜单项,所以我猜想发送者就是您要寻找的..

private void menu_click(object sender,EventArgs e)

    MenuItem mi = sender as MenuItem;
    //Access the clicked item here..
    string text = mi.Text; //Guess its called text ?

另一答案

您的事件处理程序将被赋予引发事件的对象作为“发送者”参数。您必须将其转换为MenuItem,然后检查其“ Text”属性:

public void MenuClickHandler(object sender, EventArgs e)

   var menuItem = (MenuItem)sender;

   var menuText = menuItem.Text;

另一答案

事件处理程序应具有object sender参数。如果将其强制转换为MenuItem,则应该可以访问Header属性。

void menu_click (object sender, EventArgs e)

   var clickedItem = sender as MenuItem;

   if (clickedItem == null) return;

   if (clickedItem.HasHeader)
   
       var text = clickedItem.Header;
   

另一答案

使用标准的.NET事件处理程序功能签名...

(sender as Object, e as EventArgs) ' VB.NET syntax

...在事件处理程序中,可以将sender强制转换为MenuItem并访问所有属性。

另一答案

您可以将发送方对象转换为菜单项并检索文本。

样本代码

Menu.MenuItems.Add(new MenuItem("MenuName", (o, ev) =>

    MessageBox.Show((o as MenuItem).Text);
));

以上是关于C#Windows窗体-MenuItem单击事件-获取MenuItem文本的主要内容,如果未能解决你的问题,请参考以下文章

C# Windows 窗体 - 带有事件的不可见元素(单击和 MouseEnter/Leave)

单击控件后,C#Windows窗体/用户控件不能用鼠标滚轮滚动[复制]

C#中如何实现一个按钮多次单击的事件

从 c# windows 应用程序中的按钮单击将值返回到网格

c# windows窗体中的文本框

C#WinForm无边框窗体移动----模仿鼠标单击标题栏移动窗体位置