如何在合并菜单栏上实现MouseEnter事件
本文关键字:实现 MouseEnter 事件 菜单栏 合并 | 更新日期: 2023-09-27 18:18:58
我是新来的,希望能好好表现。
我正在工作的文本编辑器(c#),我有一个父亲的形式,我可以创建几个孩子的形式。当我打开一个孩子从他的菜单带合并他的父亲的菜单带,我有孩子的菜单带在父亲的菜单带的所有功能(像一些ToolStripMenuItems)。我的问题是:我想为那些ToolStripMenuItems实现一个MouseEnter事件。这个事件将改变toolStripStatusLabel上的文本(它只位于父窗体中),在其上写入启动事件的ToolStripMenuItems的名称。我可以在父亲菜单栏的所有ToolStripMenuItems上轻松地做到这一点,但我不知道我能做些什么来为孩子菜单栏的所有ToolStripMenuItems启动这个事件。我希望他们也改变ToolStripStatusLabel。
public void ratonencima(object sender, EventArgs e)
{
ToolStripMenuItem aux = (ToolStripMenuItem)sender;
this.toolStripStatusLabel1.Text = aux.Text;
}
这是我调用的方法,当我从父亲的窗体的ToolStripMenuItem管理MouseEnter事件。我想添加事件到ToolStripMenuItem动态(在执行时)没有麻烦,当我创建一个孩子的窗体和他的菜单带合并与父亲之一。
我能做什么?
好了,我终于找到了解决问题的办法。我动态地添加了MouseEnter事件到ToolStripMenuItems(并且我还添加了MouseLeave事件到ToolStripMenuItems的文本在检测到事件时更改为空白字符串)。
我在父亲的表单上添加了这些方法:
private void eventoaelementos()
{
foreach(ToolStripMenuItem t in this.menuStrip1.Items)
{
t.MouseEnter += new EventHandler(metodoMouseEnter);
t.MouseLeave += new EventHandler(metodoMouseLeave);
foreach(ToolStripItem t2 in t.DropDownItems)
{
if(t2 is ToolStripMenuItem)
{
//To discard the ToolStripSeparator's case in which I
//obtain an exception
t2.MouseEnter += new EventHandler(metodoMouseEnter);
t2.MouseLeave += new EventHandler(metodoMouseLeave);
}
}
}
}
private void metodoMouseLeave(object sender, EventArgs e)
{
this.toolStripStatusLabel1.Text = "";
}
private void metodoMouseEnter(object sender, EventArgs e)
{
ToolStripItem t = sender as ToolStripItem;
if(t!=null)
{
this.toolStripStatusLabel1.Text = t.Text;
}
}
我调用eventtoaelementos的方法,一旦我初始化父窗体(在构造函数上),当我创建子窗体(我有一个"新建"按钮在父窗体的菜单栏上,我添加了这个方法当我点击这个按钮调用的方法)。
我希望这对你有用。
感谢您的宝贵时间。