word中的加粗变斜之类的一直让我以为是button,直到我接触了自定义控件,才发现实现这种机能最好的是CheckBox,然后我们在做一个系统的时候,这种控件有可能要用好多次,总不能在用一次的时候,就去拉一个CheckBox,并进行各种复制吧,所以最好的方式就是自定义一个控件,自定义点击的Image属性,这样你只要替换掉Image,你就要让这个变成变粗的CheckBox,变斜的CheckBox等等。
1 private void CmpCheckButton_MouseLeave(object sender, EventArgs e) 2 { 3 if (!this.Checked) 4 { 5 this.BackgroundImage = ImageNormal; 6 this.Invalidate(); 7 } 8 } 9 private void CmpCheckButton_MouseHover(object sender, EventArgs e) 10 { 11 if (!this.Checked) 12 { 13 this.BackgroundImage = ImageMouseEnter; 14 this.Invalidate(); 15 } 16 } 17 private void CmpCheckButton_CheckedChanged(object sender, EventArgs e) 18 { 19 var image = ImageNormal; 20 if (this.Checked && ImageChecked != null) 21 { 22 image = ImageChecked; 23 } 24 else 25 { 26 image = ImageMouseEnter; 27 } 28 this.BackgroundImage = image; 29 this.Invalidate(); 30 } 31 private System.Drawing.Image _imageNormal; 32 [Description("通常图片")] 33 public System.Drawing.Image ImageNormal 34 { 35 get { return _imageNormal; } 36 set 37 { 38 _imageNormal = value; 39 this.BackgroundImage = _imageNormal; 40 this.Invalidate(); 41 } 42 } 43 private System.Drawing.Image _imageChecked; 44 [DefaultValue(null), Description("Checked状态图片")] 45 public System.Drawing.Image ImageChecked 46 { 47 get { return _imageChecked; } 48 set 49 { 50 _imageChecked = value; 51 if (Checked) this.BackgroundImage = _imageChecked; 52 this.Invalidate(); 53 } 54 } 55 private System.Drawing.Image _imageMouseEnter; 56 [DefaultValue(null), Description("MouseEnter状态图片")] 57 public System.Drawing.Image ImageMouseEnter 58 { 59 get { return _imageMouseEnter; } 60 set 61 { 62 _imageMouseEnter = value; 63 this.BackgroundImage = value; 64 this.Invalidate(); 65 } 66 }