Switch Button / Toggle Button

    • C#
    • .NET (FX) 4.5–4.8

    Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von MrTrebron.

      Switch Button / Toggle Button

      ich war auf der Suche nach einem 'chicen' Switch Button oder Toggle Button. Ich bin auf eine Lösung gestoßen,
      die, wie ich finde, auch auf Deutsch verfügbar sein soll.
      Die Herangesehensweise ist recht simple. Eine Klassen-Objekt erstellen und folgenden Code einfügen. Nach dem Compilieren steht der Button zur Verfügung.

      C#-Quellcode

      1. using System.Windows.Forms;
      2. using System.Drawing;
      3. using System.Drawing.Drawing2D;
      4. using System.ComponentModel;
      5. namespace MusterProject.Controls.BenutzerTools {
      6. /// <summary>
      7. /// 'Source: https://github.com/RJCodeAdvance/Toggle-Button-WinForm/blob/main/RJToggleButton.cs
      8. /// </summary>
      9. namespace CustomControls.ToggleButton {
      10. public class SwitchButton : CheckBox {
      11. //Fields
      12. private Color onBackColor = Color.MediumSlateBlue;
      13. private Color onToggleColor = Color.WhiteSmoke;
      14. private Color offBackColor = Color.Gray;
      15. private Color offToggleColor = Color.Gainsboro;
      16. private bool solidStyle = true;
      17. //Properties
      18. #region Properties [Category("OwnTools")]
      19. public Color OnBackColor {
      20. get {
      21. return onBackColor;
      22. }
      23. set {
      24. onBackColor = value;
      25. this.Invalidate();
      26. }
      27. }
      28. [Category("OwnTools")]
      29. public Color OnToggleColor {
      30. get {
      31. return onToggleColor;
      32. }
      33. set {
      34. onToggleColor = value;
      35. this.Invalidate();
      36. }
      37. }
      38. [Category("OwnTools")]
      39. public Color OffBackColor {
      40. get {
      41. return offBackColor;
      42. }
      43. set {
      44. offBackColor = value;
      45. this.Invalidate();
      46. }
      47. }
      48. [Category("OwnTools")]
      49. public Color OffToggleColor {
      50. get {
      51. return offToggleColor;
      52. }
      53. set {
      54. offToggleColor = value;
      55. this.Invalidate();
      56. }
      57. }
      58. [Browsable(false)]
      59. public override string Text {
      60. get {
      61. return base.Text;
      62. }
      63. set {
      64. }
      65. }
      66. [Category("OwnTools")]
      67. [DefaultValue(true)]
      68. public bool SolidStyle {
      69. get {
      70. return solidStyle;
      71. }
      72. set {
      73. solidStyle = value;
      74. this.Invalidate();
      75. }
      76. }
      77. #endregion
      78. /// Constructor
      79. public SwitchButton() {
      80. this.MinimumSize = new Size(45, 22);
      81. }
      82. //Methods
      83. private GraphicsPath GetFigurePath() {
      84. int arcSize = this.Height - 1;
      85. Rectangle leftArc = new Rectangle(0, 0, arcSize, arcSize);
      86. Rectangle rightArc = new Rectangle(this.Width - arcSize - 2, 0, arcSize, arcSize);
      87. GraphicsPath path = new GraphicsPath();
      88. path.StartFigure();
      89. path.AddArc(leftArc, 90, 180);
      90. path.AddArc(rightArc, 270, 180);
      91. path.CloseFigure();
      92. return path;
      93. }
      94. protected override void OnPaint(PaintEventArgs pevent) {
      95. int toggleSize = this.Height - 5;
      96. pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
      97. pevent.Graphics.Clear(this.Parent.BackColor);
      98. if (this.Checked) //ON
      99. {
      100. //Draw the control surface
      101. if (solidStyle)
      102. pevent.Graphics.FillPath(new SolidBrush(onBackColor), GetFigurePath());
      103. else pevent.Graphics.DrawPath(new Pen(onBackColor, 2), GetFigurePath());
      104. //Draw the toggle
      105. pevent.Graphics.FillEllipse(new SolidBrush(onToggleColor),
      106. new Rectangle(this.Width - this.Height + 1, 2, toggleSize, toggleSize));
      107. } else //OFF
      108. {
      109. //Draw the control surface
      110. if (solidStyle)
      111. pevent.Graphics.FillPath(new SolidBrush(offBackColor), GetFigurePath());
      112. else pevent.Graphics.DrawPath(new Pen(offBackColor, 2), GetFigurePath());
      113. //Draw the toggle
      114. pevent.Graphics.FillEllipse(new SolidBrush(offToggleColor),
      115. new Rectangle(2, 2, toggleSize, toggleSize));
      116. }
      117. }
      118. }
      119. }
      120. }


      VB.NET-Quellcode

      1. Imports System.Windows.Forms
      2. Imports System.Drawing
      3. Imports System.Drawing.Drawing2D
      4. Imports System.ComponentModel
      5. Public Class SwitchButton
      6. Inherits CheckBox
      7. Private onBackColor As Color = Color.MediumSlateBlue
      8. Private onToggleColor As Color = Color.WhiteSmoke
      9. Private offBackColor As Color = Color.Gray
      10. Private offToggleColor As Color = Color.Gainsboro
      11. Private solidStyle As Boolean = True
      12. Public Property OnBackColor As Color
      13. Get
      14. Return onBackColor
      15. End Get
      16. Set(ByVal value As Color)
      17. onBackColor = value
      18. Me.Invalidate()
      19. End Set
      20. End Property
      21. <Category("OwnTools")>
      22. Public Property OnToggleColor As Color
      23. Get
      24. Return onToggleColor
      25. End Get
      26. Set(ByVal value As Color)
      27. onToggleColor = value
      28. Me.Invalidate()
      29. End Set
      30. End Property
      31. <Category("OwnTools")>
      32. Public Property OffBackColor As Color
      33. Get
      34. Return offBackColor
      35. End Get
      36. Set(ByVal value As Color)
      37. offBackColor = value
      38. Me.Invalidate()
      39. End Set
      40. End Property
      41. <Category("OwnTools")>
      42. Public Property OffToggleColor As Color
      43. Get
      44. Return offToggleColor
      45. End Get
      46. Set(ByVal value As Color)
      47. offToggleColor = value
      48. Me.Invalidate()
      49. End Set
      50. End Property
      51. <Browsable(False)>
      52. Public Overrides Property Text As String
      53. Get
      54. Return MyBase.Text
      55. End Get
      56. Set(ByVal value As String)
      57. End Set
      58. End Property
      59. <Category("OwnTools")>
      60. <DefaultValue(True)>
      61. Public Property SolidStyle As Boolean
      62. Get
      63. Return solidStyle
      64. End Get
      65. Set(ByVal value As Boolean)
      66. solidStyle = value
      67. Me.Invalidate()
      68. End Set
      69. End Property
      70. Public Sub New()
      71. Me.MinimumSize = New Size(45, 22)
      72. End Sub
      73. Private Function GetFigurePath() As GraphicsPath
      74. Dim arcSize As Integer = Me.Height - 1
      75. Dim leftArc As Rectangle = New Rectangle(0, 0, arcSize, arcSize)
      76. Dim rightArc As Rectangle = New Rectangle(Me.Width - arcSize - 2, 0, arcSize, arcSize)
      77. Dim path As GraphicsPath = New GraphicsPath()
      78. path.StartFigure()
      79. path.AddArc(leftArc, 90, 180)
      80. path.AddArc(rightArc, 270, 180)
      81. path.CloseFigure()
      82. Return path
      83. End Function
      84. Protected Overrides Sub OnPaint(ByVal pevent As PaintEventArgs)
      85. Dim toggleSize As Integer = Me.Height - 5
      86. pevent.Graphics.SmoothingMode = SmoothingMode.AntiAlias
      87. pevent.Graphics.Clear(Me.Parent.BackColor)
      88. If Me.Checked Then
      89. If solidStyle Then
      90. pevent.Graphics.FillPath(New SolidBrush(onBackColor), GetFigurePath())
      91. Else
      92. pevent.Graphics.DrawPath(New Pen(onBackColor, 2), GetFigurePath())
      93. End If
      94. pevent.Graphics.FillEllipse(New SolidBrush(onToggleColor), New Rectangle(Me.Width - Me.Height + 1, 2, toggleSize, toggleSize))
      95. Else
      96. If solidStyle Then
      97. pevent.Graphics.FillPath(New SolidBrush(offBackColor), GetFigurePath())
      98. Else
      99. pevent.Graphics.DrawPath(New Pen(offBackColor, 2), GetFigurePath())
      100. End If
      101. pevent.Graphics.FillEllipse(New SolidBrush(offToggleColor), New Rectangle(2, 2, toggleSize, toggleSize))
      102. End If
      103. End Sub
      104. End Class



      All credits to: www.rjcodeadvance.com
      Weitere Anpassungsmöglichkeiten:

      codemengenbedingt TabMenü für beide Sprachen eingebaut ~VaporiZed

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

      @DMO Ich gehe mal davon aus, dass Du den VB-Code mit einem Automaten generiert hast, ohne ihn zumindest auf Compilierbarkeit getestet zu haben. X(
      Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
      Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
      Ein guter .NET-Snippetkonverter (der ist verfügbar).
      Programmierfragen über PN / Konversation werden ignoriert!
      Sehe ich das Richtig, du veröffentlichst hier den Code von jemanden Anderen?

      Nachtrag: im Code ist ein Verweis auf ein GitHub Repo von RJCodeAdvanceam. Am Ende des Posts, vor dem Video von RJCodeAdvance, ist noch ein Verweis auf die Seite von RJCodeAdvance.
      Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MrTrebron“ ()