我目前正在开发一个Windows窗体控件库,作为其中的一部分,我正在编写一个自定义按钮控件。它与标准的Button控件非常相似,但它在呈现方式上确实存在一些差异。话虽如此,下面的代码并不是我想要实现的完整代表,但它确实说明了我想要做的事。
以下是代码示例:
public class Button : System.Windows.Forms.ButtonBase, IButtonControl
{
public Button()
{
base.SetStyle(ControlStyles.UserPaint, true);
base.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
base.SetStyle(ControlStyles.ResizeRedraw, true);
base.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
}
protected override void OnPaint(PaintEventArgs e)
{
using (Bitmap bitmap = new Bitmap(this.ClientRectangle.Width,
this.ClientRectangle.Height,
PixelFormat.Format32bppArgb))
{
using(Graphics graphics = Graphics.FromImage(bitmap))
{
ButtonRenderer.DrawButton(graphics,
this.ClientRectangle,
this.Text,
this.Font,
TextFormatFlags.HorizontalCenter
| TextFormatFlags.VerticalCenter,
this.Focused,
this.GetButtonState());
}
e.Graphics.DrawImageUnscaled(bitmap, this.ClientRectangle);
}
}
}
这很好用,并且适当地渲染按钮,但是,按钮上总是有一个聚焦的矩形,即使窗体上的其他对象应该接收焦点(从而从自定义按钮中移除焦点),它仍然是用焦点矩形绘制。
这有什么理由吗?为什么控制不会失去焦点?
答案 0 :(得分:1)
试试这个
public Button()
{
base.SetStyle(ControlStyles.UserPaint, true);
base.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
base.SetStyle(ControlStyles.ResizeRedraw, true);
base.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
base.SetStyle(ControlStyles.Selectable, false);
}
它删除了控件的焦点矩形。