我是新来的,我希望能做得好。
我正在编写一个文本编辑器(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与父亲合并时没有麻烦。
我该怎么办?
答案 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的方法,我添加了这个我单击此按钮时调用的方法的方法。
我希望你觉得这很有用。
感谢您的时间。