如何在合并菜单栏上实现MouseEnter事件



我是新来的,希望能好好表现。

我正在工作的文本编辑器(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的方法,一旦我初始化父窗体(在构造函数上),当我创建子窗体(我有一个"新建"按钮在父窗体的菜单栏上,我添加了这个方法当我点击这个按钮调用的方法)。

我希望这对你有用。

感谢您的宝贵时间。

最新更新