ToggleButton.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. using System;
  2. using System.Windows.Forms;
  3. using System.Drawing;
  4. using System.ComponentModel;
  5. using CustomControls.HelperClasses;
  6. namespace CustomControls.Win32Controls
  7. {
  8. public class ToggleButton:PushButton
  9. {
  10. private bool _Pushed=false;
  11. private bool _AutoToggle=true;
  12. [Category("Behavior")]
  13. [DefaultValue(typeof(bool),"False")]
  14. public bool Pushed
  15. {
  16. get{return _Pushed;}
  17. set
  18. {
  19. if (value !=_Pushed)
  20. {
  21. _Pushed= value;
  22. Invalidate();
  23. }
  24. }
  25. }
  26. [Category("Behavior")]
  27. [DefaultValue(typeof(bool),"True")]
  28. [Description("If True, the control automatically toggles Pushed state on MouseClick.")]
  29. public bool AutoToggle
  30. {
  31. get{return _AutoToggle;}
  32. set{_AutoToggle=value;}
  33. }
  34. public ToggleButton():base()
  35. {
  36. }
  37. protected override void PaintBackground(Graphics g, Rectangle bounds)
  38. {
  39. Color BackColor=(this.Parent!=null)?Parent.BackColor:CustomControls.BaseClasses.AppColors.ControlColor;
  40. Color BorderColor=CustomControls.BaseClasses.AppColors.HighlightColor;
  41. if(Enabled)
  42. {
  43. switch (State)
  44. {
  45. case Enumerations.ButtonState.Normal:
  46. {
  47. if (Pushed)
  48. {
  49. if (Focused)
  50. {
  51. BackColor=CustomControls.BaseClasses.AppColors.HighlightColor;
  52. }
  53. else
  54. {
  55. BackColor=CustomControls.BaseClasses.AppColors.HighlightColorLight;
  56. }
  57. BorderColor=CustomControls.BaseClasses.AppColors.HighlightColorDarkDark;
  58. }
  59. else
  60. {
  61. if (Focused)
  62. {
  63. BorderColor=CustomControls.BaseClasses.AppColors.HighlightColorDarkDark;
  64. }
  65. }
  66. break;
  67. }
  68. case Enumerations.ButtonState.Hot:
  69. {
  70. if (Pushed)
  71. {
  72. BackColor=CustomControls.BaseClasses.AppColors.HighlightColorDark;
  73. }
  74. else
  75. {
  76. BackColor=CustomControls.BaseClasses.AppColors.HighlightColor;
  77. }
  78. BorderColor=CustomControls.BaseClasses.AppColors.HighlightColorDarkDark;
  79. break;
  80. }
  81. case Enumerations.ButtonState.Pushed:
  82. {
  83. BackColor=CustomControls.BaseClasses.AppColors.HighlightColorDark;
  84. BorderColor=CustomControls.BaseClasses.AppColors.HighlightColorDarkDark;
  85. break;
  86. }
  87. }
  88. }
  89. else
  90. {
  91. BackColor=SystemColors.Control;
  92. BorderColor=CustomControls.BaseClasses.AppColors.ToolbarBackColor;
  93. }
  94. using( SolidBrush BackBrush= new SolidBrush(Color.White))
  95. {
  96. if (!(State==Enumerations.ButtonState.Normal && !Pushed))g.FillRectangle(BackBrush,bounds);
  97. BackBrush.Color=BackColor ;
  98. g.FillRectangle(BackBrush,bounds);
  99. }
  100. using(Pen BorderPen = new Pen(BorderColor))
  101. {
  102. g.DrawRectangle(BorderPen,new Rectangle(bounds.X,bounds.Y,bounds.Width-1,bounds.Height-1));
  103. }
  104. }
  105. protected override void OnClick(EventArgs e)
  106. {
  107. base.OnClick (e);
  108. if (AutoToggle){Pushed=!Pushed;}
  109. }
  110. }
  111. }