CheckBox自訂勾選範圍太小,一直都是常見的使用者抱怨問題
最常見的作法就是使用使用者控制項來模擬一個CheckBox工具
其實我知道還有一個方法就是直接改寫CheckBox的原始碼
奈何在下才疏學淺,一直都不知道重何下手,而網路上也一直找不到好的參考資料
最近偶然發現了一篇改寫CheckBox的方法,當然要趕緊記錄下來。
public partial class CheckBoxEx : System.Windows.Forms.CheckBox
{
public override string Text
{
get
{
return base.Text;
}
set
{
base.Text = value;
Size size = TextRenderer.MeasureText(value, Font);
if (Width < size.Width + ClientSize.Height)
Width = size.Width + ClientSize.Height;
}
}
public override Font Font
{
get
{
return base.Font;
}
set
{
base.Font = value;
Size size = TextRenderer.MeasureText(Text, value);
if (Width < size.Width + ClientSize.Height)
Width = size.Width + ClientSize.Height;
}
}
protected override void OnPaint(PaintEventArgs e)
{
int h = ClientSize.Height;
Rectangle rc = new Rectangle(new Point(0, 0), new Size(h, h));
e.Graphics.Clear(Parent.BackColor);
ControlPaint.DrawCheckBox(
e.Graphics, rc,
this.Checked ? ButtonState.Checked : ButtonState.Normal
);
SizeF size = e.Graphics.MeasureString(Text, Font);
e.Graphics.DrawString(
Text, this.Font,
new SolidBrush(Color.Black), new PointF(h, size.Height < h ? (h - size.Height) / 2 : 0)
);
h = 0;
e.Dispose();
}
}
補充:
改寫Form控制項,不建議在UserControl、CustomControl 這兩個類型上撰寫,這兩個類型容易發生編譯上的錯誤
建議直接在空的Class類別上開發,開發後其他專案就可以直接在空具箱裡使用。
把改寫的控制項放入工具箱步驟:
1.
2.
直接選擇已編譯完成的新控制項物件即可。