如何在Merged menustrip上实现MouseEnter事件

时间:2015-10-22 11:51:54

标签: c#

我是新来的,我希望能做得好。

我正在编写一个文本编辑器(c#),其中我有一个父亲的表格,我可以创建几个孩子的表格。当我打开一个子窗体时,他的menuStrip合并了他父亲的menustrip,我在父亲的menuStrip上拥有了孩子们的menuStrip的所有功能(就像一些ToolStripMenuItems)。 我的问题是:我想为那些ToolStripMenuItems实现MouseEnter事件。此事件将更改toolStripStatusLabel(仅位于父亲的表单中)上的文本,并在其上写入启动事件的ToolStripMenuItems的名称。我可以在父亲的menustrip的所有ToolStripMenuItems上轻松完成,但我不知道如何为Child的所有ToolsttripMenuItems启动此事件。我希望他们也改变ToolStripStatusLabel。

 public void ratonencima(object sender, EventArgs e)
    {
        ToolStripMenuItem aux = (ToolStripMenuItem)sender;
        this.toolStripStatusLabel1.Text = aux.Text;
    }

当我从父亲的形式的ToolStripMenuItem管理MouseEnter事件时,这是我调用的方法。我希望将事件添加到ToolStripMenuItem(在执行时),因为当我创建一个Child`s Form并且他的MenuStrip与父亲合并时没有麻烦。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

好吧,最后我找到了解决问题的方法。 我动态地将MouseEnter事件添加到ToolStripMenuIitems(并且我还向该ToolStripMenuItems添加了一个MouseLeave事件,以便在检测到事件时将文本更改为空字符串。)

我在父亲的表格上添加了这些方法:

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;
        }
    }

一旦我初始化了父亲的表格(在构造函数上)并且当我创建了一个孩子的表格时(我在父亲的表格上的MenuStrip上有一个“新”按钮)我调用了eventoaelementos的方法,我添加了这个我单击此按钮时调用的方法的方法。

我希望你觉得这很有用。

感谢您的时间。