【问题标题】:Add an outline over a control when mouse hovers over it(sometimes)当鼠标悬停在控件上时在控件上添加轮廓(有时)
【发布时间】:2011-11-09 15:29:45
【问题描述】:

我正在尝试向我的一些控件添加帮助功能,但我在选择控件以获取我想要的帮助时遇到了困难。

这就是我想做的。

  1. 点击帮助按钮
  2. 将光标更改为帮助
  3. 将鼠标悬停在控件上时显示控件的蓝色轮廓
  4. 点击时弹出帮助事件。

目前我已经实现了 excpet #3,我可以做一个 MouseDown 事件,这样我的点击事件在被选中时不会触发(工作正常,除了大纲)。有谁知道我如何概述控件以及单击时适合触发的事件?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    扩展 jberger 的答案,您可以使用控件的 MouseHover 事件在控件周围绘制一个矩形,类似于:

    private void Control_MouseHover ( object sender, EventArgs e ) {
        if ( inHelpMode ) {
            var c = (Control)sender;
            var rect = c.Bounds;
            rect.Inflate(1,1);
            var g = CreateGraphics ();
            ControlPaint.DrawBorder ( g, rect, Color.Blue, ButtonBorderStyle.Solid );
        }
    }
    

    这假设您有一个私有实例变量inHelpMode,当用户单击“帮助”按钮时您正在设置该变量。

    当用户将鼠标的焦点从控件上移开时,您可能还希望从控件中移除蓝色轮廓。为此,您可以使用 MouseLeave 事件:

    private void Control_MouseLeave ( object sender, EventArgs e ) {
        Invalidate ();
    }
    

    【讨论】:

    • Tim,感谢您添加边框代码。考虑到问题的精确性,我假设 OP 会想要使用他自己的绘图代码。显然,Artur 不这么认为。
    • @jberger;谢谢。我知道你的建议,只是想我会添加边框代码,以防其他人将来发现这个问题并且不知道如何绘制边框。
    【解决方案2】:

    部分回答。这是我要开始的地方。

    假设:isInHelpMode 是应用程序中的私有实例变量,当单击“帮助”按钮时将其设置为 true...

    应用中的某处:

    myControl.MouseHover += (sender,eventArgs) => 
    {
        if(isInHelpMode)
        {// draw blue outline
           // insert your code to draw the blue outline
        }
    }
    

    Control.MouseHover

    【讨论】:

    • 他什么都有,除了#3。当悬停在控件上时,显示控件的蓝色轮廓。我假设当点击帮助按钮时,应用程序中的一些私有实例变量正在被切换。在我的代码中,我假设变量名称被命名为“isInHelpMode”,并且当单击“帮助”按钮时它被设置为 true。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    相关资源
    最近更新 更多