我想覆盖System.Windows.Forms.UserControl来绘制自定义边框(例如使用自定义颜色)。使用内置类是不可能的,因为可以影响边界行为的唯一方法/属性是BorderStyle。
以下面的方式覆盖OnPaint(下面的代码)不是一个好的解决方案,因为它基本上是在原始的边框上绘制另一个边框。
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
if (this.BorderStyle == BorderStyle.FixedSingle)
ControlPaint.DrawBorder(e.Graphics, this.ClientRectangle, Color.LightGray, ButtonBorderStyle.Solid);
}
有人知道如何在自定义控件中覆盖边框绘制吗?
出于某些原因,将此用户控件放入面板不是我的选择。
答案 0 :(得分:5)
将base.BorderStyle设置为None,不绘制默认边框。您需要覆盖BorderStyle属性才能使其正常工作。
public UserControl1() {
InitializeComponent();
base.BorderStyle = BorderStyle.None;
this.BorderStyle = BorderStyle.FixedSingle;
}
private BorderStyle border;
public new BorderStyle BorderStyle {
get { return border; }
set {
border = value;
Invalidate();
}
}