WinForm 如何自定义开关控件

举报
AI浩 发表于 2021/12/23 00:58:42 2021/12/23
【摘要】 先上结果: 由于WinForm中没有开关控件,需要自定义。下面就写我制作开关控件的步骤。 1、新建个WinForm程序,右键选择属性。 2、点击资源,将资源的类型修改为图像,然后将Button的图片复制进去(直接从文件夹里复制就行了) 3、新建用户控件,命名为OnOffButton。 在OnOffButton....

先上结果:

由于WinForm中没有开关控件,需要自定义。下面就写我制作开关控件的步骤。

1、新建个WinForm程序,右键选择属性。

2、点击资源,将资源的类型修改为图像,然后将Button的图片复制进去(直接从文件夹里复制就行了)

3、新建用户控件,命名为OnOffButton。

在OnOffButton.cs中编写代码。


  
  1. using System;
  2. using System.Drawing;
  3. using System.Windows.Forms;
  4. namespace WindowsFormsApp1
  5. {
  6. public enum CheckStyle
  7. {
  8. style1 = 0,
  9. style2 = 1,
  10. style3 = 2,
  11. style4 = 3,
  12. style5 = 4,
  13. style6 = 5
  14. };
  15. public partial class OnOffButton : UserControl
  16. {
  17. public OnOffButton()
  18. {
  19. InitializeComponent();
  20. //设置Style支持透明背景色并且双缓冲
  21. this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
  22. this.SetStyle(ControlStyles.DoubleBuffer, true);
  23. this.SetStyle(ControlStyles.ResizeRedraw, true);
  24. this.SetStyle(ControlStyles.Selectable, true);
  25. this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
  26. this.SetStyle(ControlStyles.UserPaint, true);
  27. this.BackColor = Color.Transparent;
  28. this.Cursor = Cursors.Hand;
  29. this.Size = new Size(87, 27);
  30. }
  31. bool isCheck = false;
  32. /// <summary>
  33. /// 是否选中
  34. /// </summary>
  35. public bool Checked
  36. {
  37. set { isCheck = value; this.Invalidate(); }
  38. get { return isCheck; }
  39. }
  40. CheckStyle checkStyle = CheckStyle.style1;
  41. /// <summary>
  42. /// 样式
  43. /// </summary>
  44. public CheckStyle CheckStyleX
  45. {
  46. set { checkStyle = value; this.Invalidate(); }
  47. get { return checkStyle; }
  48. }
  49. protected override void OnPaint(PaintEventArgs e)
  50. {
  51. Bitmap bitMapOn = null;
  52. Bitmap bitMapOff = null;
  53. if (checkStyle == CheckStyle.style1)
  54. {
  55. bitMapOn = global::WindowsFormsApp1.Properties.Resources.btncheckon1;
  56. bitMapOff = global::WindowsFormsApp1.Properties.Resources.btncheckoff1;
  57. }
  58. else if (checkStyle == CheckStyle.style2)
  59. {
  60. bitMapOn = global::WindowsFormsApp1.Properties.Resources.btncheckon2;
  61. bitMapOff = global::WindowsFormsApp1.Properties.Resources.btncheckoff2;
  62. }
  63. else if (checkStyle == CheckStyle.style3)
  64. {
  65. bitMapOn = global::WindowsFormsApp1.Properties.Resources.btncheckon3;
  66. bitMapOff = global::WindowsFormsApp1.Properties.Resources.btncheckoff3;
  67. }
  68. else if (checkStyle == CheckStyle.style4)
  69. {
  70. bitMapOn = global::WindowsFormsApp1.Properties.Resources.btncheckon4;
  71. bitMapOff = global::WindowsFormsApp1.Properties.Resources.btncheckoff4;
  72. }
  73. else if (checkStyle == CheckStyle.style5)
  74. {
  75. bitMapOn = global::WindowsFormsApp1.Properties.Resources.btncheckon5;
  76. bitMapOff = global::WindowsFormsApp1.Properties.Resources.btncheckoff5;
  77. }
  78. else if (checkStyle == CheckStyle.style6)
  79. {
  80. bitMapOn = global::WindowsFormsApp1.Properties.Resources.btncheckon6;
  81. bitMapOff = global::WindowsFormsApp1.Properties.Resources.btncheckoff6;
  82. }
  83. Graphics g = e.Graphics;
  84. Rectangle rec = new Rectangle(0, 0, this.Size.Width, this.Size.Height);
  85. if (isCheck)
  86. {
  87. g.DrawImage(bitMapOn, rec);
  88. }
  89. else
  90. {
  91. g.DrawImage(bitMapOff, rec);
  92. }
  93. }
  94. private void OnOffButton_Click(object sender, EventArgs e)
  95. {
  96. isCheck = !isCheck;
  97. this.Invalidate();
  98. }
  99. }
  100. }

然后编写OnOffButton.Designer.cs代码。主要修改组件设计器生成的代码


  
  1. #region 组件设计器生成的代码
  2. /// <summary>
  3. /// 设计器支持所需的方法 - 不要修改
  4. /// 使用代码编辑器修改此方法的内容。
  5. /// </summary>
  6. private void InitializeComponent()
  7. {
  8. this.SuspendLayout();
  9. this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
  10. this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
  11. this.Name = "myButtonCheck";
  12. this.Click += new System.EventHandler(this.OnOffButton_Click);
  13. this.ResumeLayout(false);
  14. }

 

然后生成解决方案。就可以在工具箱里看到组件了。

将组件拖入Form中就可以使用。

代码链接:https://download.csdn.net/download/hhhhhhhhhhwwwwwwwwww/14044575

 

文章来源: wanghao.blog.csdn.net,作者:AI浩,版权归原作者所有,如需转载,请联系作者。

原文链接:wanghao.blog.csdn.net/article/details/112347639

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。