使用状态栏合并工具提示文本功能

时间:2011-04-04 16:05:20

标签: .net winforms

我有一个包含多个容器嵌套级别的表单(选项卡控件,表格,面板)。最低级别的控件都有工具提示文本。工具提示有效(有些时候,但这是另一种蠕虫)。我想添加一小段代码来改变MDI父级的状态栏文本,使其等于鼠标结束的任何控件的工具提示文本。如果我在窗体上使用MouseMove,它会在窗体上拾取移动,但不会在任何子控件上拾取。如果我使用MouseLeave,它只会拾取鼠标移动到最顶层的子节点(一个制表符控件)而内部没有任何内容。

我或许可以通过所有容器递归并添加MouseLeave处理程序,但这看起来很糟糕。关于实现这一目标的最简单方法的提示将不胜感激。感谢。

1 个答案:

答案 0 :(得分:0)

供参考,这是我在表单构造函数中执行的非理想递归解决方案:

        Action<Control> mouseListen = null;
        mouseListen = control =>
        {
            string toolText = toolTip.GetToolTip(control);
            if (toolText != "")
            {
                control.MouseEnter += (sender, args) =>
                    { Program.MainForm.Status = toolText; };
                control.MouseLeave += (sender, args) =>
                    { Program.MainForm.Status = Program.MainForm.DefaultStatus; };
            }
            foreach (Control child in control.Controls)
                mouseListen(child);
        };
        mouseListen(this);