【发布时间】:2011-09-08 07:41:42
【问题描述】:
在我们的应用程序中,我们在白色表单上有白色按钮。当鼠标悬停在按钮上时,我们希望在按钮上显示一个浅蓝色透明矩形。
我想创建这个用户控件,但我不知道怎么做。我已经尝试了谷歌,但我没有找到任何可以帮助我的东西,所以我希望你们能指出我正确的方向。
【问题讨论】:
-
您要更改背景颜色还是例如在文本周围绘制矩形?
在我们的应用程序中,我们在白色表单上有白色按钮。当鼠标悬停在按钮上时,我们希望在按钮上显示一个浅蓝色透明矩形。
我想创建这个用户控件,但我不知道怎么做。我已经尝试了谷歌,但我没有找到任何可以帮助我的东西,所以我希望你们能指出我正确的方向。
【问题讨论】:
您可以从Button 派生您自己的WinForms 控件并覆盖OnPaint 事件。在事件处理程序中,您将有一个 PaintEventArg 参数,其中包含名为 Graphics 的属性。您可以使用此属性直接在控件所在的位置绘制您想要的任何内容。
这是一个直接来自 MSDN 的示例:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onpaint.aspx
补充:刚刚重新阅读你的问题,发现我没有正确回复。
基本上,您必须重写两个事件并添加一个属性来显示您的控件是否应该使用覆盖的矩形进行绘制,比如IsDrawRectangle。一旦OnMouseEnter 事件被触发,您检查是否设置了 IsDrawRectangle,如果没有设置为 true 并调用this.Invalidate()。 Invalidate() 方法将强制重新绘制控件,然后在您的 OnPaint 事件中再次检查您的 IsDrawRectangle 属性的值并在需要时绘制矩形。
您还必须覆盖 OnMouseLeave 以将属性设置回 false 并强制重绘以移除矩形。
添加:如果您需要重新绘制的不仅仅是单个控件(以防您的矩形覆盖了一些需要重新绘制的其他控件),那么请放置您想要的所有内容在一个容器中重新绘制并在您的事件处理程序中调用Parent.Invalidate() 方法。
【讨论】: