C# 当鼠标悬停在控件上时,在控件上添加轮廓(有时)

C# 当鼠标悬停在控件上时,在控件上添加轮廓(有时),c#,winforms,C#,Winforms,我正在尝试将帮助功能添加到我的一些控件中,但我很难按照自己的意愿选择帮助控件 这就是我想做的 单击“帮助”按钮 将光标更改为“帮助” 将鼠标悬停在控件上时,显示控件的蓝色轮廓 单击时,弹出帮助事件 目前我已经实现了excpet#3的所有功能,我可以执行鼠标向下事件,这样我的点击事件在选中时不会触发(正常工作,除了大纲)。有人知道我如何概述控件,以及单击时适合触发什么事件吗?部分答案。我从这里开始 假设:isInHelpMode是应用程序中的一个私有实例变量,当单击“帮助”按钮时,该变量被设置为t

我正在尝试将帮助功能添加到我的一些控件中,但我很难按照自己的意愿选择帮助控件

这就是我想做的

  • 单击“帮助”按钮
  • 将光标更改为“帮助”
  • 将鼠标悬停在控件上时,显示控件的蓝色轮廓
  • 单击时,弹出帮助事件
  • 目前我已经实现了excpet#3的所有功能,我可以执行鼠标向下事件,这样我的点击事件在选中时不会触发(正常工作,除了大纲)。有人知道我如何概述控件,以及单击时适合触发什么事件吗?

    部分答案。我从这里开始

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

    应用程序中的某个地方:

    myControl.MouseHover += (sender,eventArgs) => 
    {
        if(isInHelpMode)
        {// draw blue outline
           // insert your code to draw the blue outline
        }
    }
    
    部分答案。我从这里开始

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

    应用程序中的某个地方:

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

    根据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 );
        }
    }
    
    这假设您在帮助模式中有一个私有实例变量
    ,当用户单击帮助按钮时,您正在设置该变量

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

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

    根据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 );
        }
    }
    
    这假设您在帮助模式中有一个私有实例变量
    ,当用户单击帮助按钮时,您正在设置该变量

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

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

    他什么都有,除了3。将鼠标悬停在控件上时,显示控件的蓝色轮廓。我假设当单击“帮助”按钮时,应用程序中的某个私有实例变量正在被切换。在我的代码中,我假设变量名为“isInHelpMode”,并且在单击“帮助”按钮时它被设置为true。他拥有除#3之外的所有内容。将鼠标悬停在控件上时,显示控件的蓝色轮廓。我假设当单击“帮助”按钮时,应用程序中的某个私有实例变量正在被切换。在我的代码中,我假设变量名为“isInHelpMode”,并且在单击“帮助”按钮时它被设置为true。Tim,感谢您添加了边框代码。考虑到问题的精确性,我假设OP会使用自己的绘图代码。显然,阿图尔的想法是相反的;谢谢我知道你的建议,只是想我会添加边界代码,以防将来有人发现这个问题,并且不知道如何绘制边界。蒂姆,你添加了边界代码,真是太好了。考虑到问题的精确性,我假设OP会使用自己的绘图代码。显然,阿图尔的想法是相反的;谢谢我知道你的建议,只是想我会添加边界代码,以防将来有人发现这个问题,并且不知道如何绘制边界。