当鼠标悬停在控件上时(有时)在控件上添加一个轮廓

时间:2011-11-09 15:29:46

标签: c# winforms

我正在尝试为我的某些控件添加帮助功能,而且我很难选择控件以获得我想要的帮助。

这就是我想做的事。

  1. 点击“帮助”按钮
  2. 将光标更改为帮助
  3. 当鼠标悬停在控件上时显示控件的蓝色轮廓
  4. 点击弹出帮助活动时。
  5. 目前我已经实现了excpet#3的一切,我可以做一个MouseDown事件,这样我的点击事件在选中时不会触发(工作正常,除了大纲)。有没有人知道我如何概述控件以及点击时哪个事件适合点火?

2 个答案:

答案 0 :(得分:3)

扩展jberger的答案,您可以使用Control的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 ();
}

答案 1 :(得分:1)

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

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

应用中的某个地方:

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

Control.MouseHover