2017/11/29

[C#] 自訂CheckBox勾選區域

CheckBox自訂勾選範圍太小,一直都是常見的使用者抱怨問題
最常見的作法就是使用使用者控制項來模擬一個CheckBox工具
其實我知道還有一個方法就是直接改寫CheckBox的原始碼
奈何在下才疏學淺,一直都不知道重何下手,而網路上也一直找不到好的參考資料
最近偶然發現了一篇改寫CheckBox的方法,當然要趕緊記錄下來。

資料來源:http://inpega.blogspot.tw/2015/02/ccheckbox.html
主要程式碼都不是我所寫的,我只做了一點調整,為了怕以後找不到資料特複製於此,有任何侵權請通知我,我會立即刪除!

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.

直接選擇已編譯完成的新控制項物件即可。


沒有留言:

張貼留言