BtnButton.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. 
  2. using System;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Windows.Forms;
  6. namespace Dongke.WinForm.Controls
  7. {
  8. /// <summary>
  9. /// 标准按钮控件
  10. /// </summary>
  11. [ToolboxBitmap(typeof(Button))]
  12. public class BtnButton : Button, IDKControl, IAsyncControl
  13. {
  14. #region 成员变量
  15. /// <summary>
  16. /// 焦点是否进入控件
  17. /// </summary>
  18. private bool _entered = false;
  19. /// <summary>
  20. /// 鼠标是否进入控件
  21. /// </summary>
  22. private bool _mouseOver = false;
  23. #endregion
  24. #region 构造函数
  25. /// <summary>
  26. /// 标准按钮控件
  27. /// </summary>
  28. public BtnButton()
  29. {
  30. this.Size = new Size(85, 30);
  31. }
  32. #endregion
  33. #region 属性
  34. /// <summary>
  35. /// 获取一个值,该值指示控件是否有输入焦点。
  36. /// </summary>
  37. [DefaultValue(false)]
  38. [Browsable(false)]
  39. [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
  40. [EditorBrowsable(EditorBrowsableState.Advanced)]
  41. public virtual bool Entered
  42. {
  43. get
  44. {
  45. return this._entered;
  46. }
  47. protected set
  48. {
  49. this._entered = value;
  50. }
  51. }
  52. /// <summary>
  53. /// 获取一个值,该值指示鼠标是否在控件上方。
  54. /// </summary>
  55. [DefaultValue(false)]
  56. [Browsable(false)]
  57. [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
  58. [EditorBrowsable(EditorBrowsableState.Advanced)]
  59. public virtual bool MouseOver
  60. {
  61. get
  62. {
  63. return this._mouseOver;
  64. }
  65. protected set
  66. {
  67. this._mouseOver = value;
  68. }
  69. }
  70. #endregion
  71. #region 重写属性
  72. /// <summary>
  73. /// 获取或设置控件的前景色
  74. /// </summary>
  75. [DefaultValue(typeof(Color), "White")]
  76. public override Color ForeColor
  77. {
  78. get
  79. {
  80. return Color.White;
  81. }
  82. //set
  83. //{
  84. //}
  85. }
  86. /// <summary>
  87. /// 获取或设置控件的前景色
  88. /// </summary>
  89. //[DefaultValue(typeof(Resources), "button_00_back")]
  90. [Browsable(false)]
  91. [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
  92. [EditorBrowsable(EditorBrowsableState.Never)]
  93. public override Image BackgroundImage
  94. {
  95. get
  96. {
  97. if (!this.Enabled)
  98. {
  99. return Properties.Resources.Button_Disable_00;
  100. }
  101. if (this._mouseOver)
  102. {
  103. return Properties.Resources.Button_Enter_00;
  104. }
  105. return Properties.Resources.Button_Back_00;
  106. }
  107. //set
  108. //{
  109. //}
  110. }
  111. #endregion
  112. #region 重写事件
  113. #region 焦点事件
  114. /// <summary>
  115. /// 输入焦点进入控件
  116. /// </summary>
  117. /// <param name="e"></param>
  118. protected override void OnEnter(EventArgs e)
  119. {
  120. this.Entered = true;
  121. base.OnEnter(e);
  122. }
  123. /// <summary>
  124. /// 获得焦点
  125. /// </summary>
  126. /// <param name="e"></param>
  127. protected override void OnGotFocus(EventArgs e)
  128. {
  129. base.OnGotFocus(e);
  130. }
  131. /// <summary>
  132. /// 失去焦点
  133. /// </summary>
  134. /// <param name="e"></param>
  135. protected override void OnLostFocus(EventArgs e)
  136. {
  137. base.OnLostFocus(e);
  138. }
  139. /// <summary>
  140. /// 输入焦点离开控件
  141. /// </summary>
  142. /// <param name="e"></param>
  143. protected override void OnLeave(EventArgs e)
  144. {
  145. base.OnLeave(e);
  146. //this.Entered = false;
  147. }
  148. /// <summary>
  149. /// 验证事件
  150. /// </summary>
  151. /// <param name="e"></param>
  152. protected override void OnValidating(CancelEventArgs e)
  153. {
  154. base.OnValidating(e);
  155. if (!e.Cancel)
  156. {
  157. this.Entered = false;
  158. }
  159. }
  160. #endregion
  161. #region 鼠标事件
  162. /// <summary>
  163. /// 鼠标进入控件
  164. /// </summary>
  165. /// <param name="e"></param>
  166. protected override void OnMouseEnter(EventArgs e)
  167. {
  168. this.MouseOver = true;
  169. base.OnMouseEnter(e);
  170. }
  171. /// <summary>
  172. /// 鼠标离开控件
  173. /// </summary>
  174. /// <param name="e"></param>
  175. protected override void OnMouseLeave(EventArgs e)
  176. {
  177. base.OnMouseLeave(e);
  178. this.MouseOver = false;
  179. }
  180. /// <summary>
  181. /// 鼠标移动
  182. /// </summary>
  183. /// <param name="e"></param>
  184. protected override void OnMouseMove(MouseEventArgs e)
  185. {
  186. base.OnMouseMove(e);
  187. }
  188. /// <summary>
  189. /// 鼠标按下
  190. /// </summary>
  191. /// <param name="e"></param>
  192. protected override void OnMouseDown(MouseEventArgs e)
  193. {
  194. base.OnMouseDown(e);
  195. }
  196. /// <summary>
  197. /// 鼠标抬起
  198. /// </summary>
  199. /// <param name="e"></param>
  200. protected override void OnMouseUp(MouseEventArgs e)
  201. {
  202. base.OnMouseUp(e);
  203. }
  204. #endregion
  205. #endregion
  206. #region IAsyncControl 成员
  207. #region 成员变量
  208. /// <summary>
  209. /// 异步处理开始时,控件状态
  210. /// </summary>
  211. private bool _asyncBeginStatus = false;
  212. private bool _asyncBeginFocused = false;
  213. #endregion
  214. #region 公有方法
  215. /// <summary>
  216. /// 开始异步处理
  217. /// </summary>
  218. /// <param name="doFocus">是否处理焦点</param>
  219. public virtual void BeginAsync(ref bool doFocus)
  220. {
  221. this._asyncBeginFocused = false;
  222. if (doFocus && this.Focused)
  223. {
  224. this._asyncBeginFocused = true;
  225. doFocus = false;
  226. }
  227. this._asyncBeginStatus = this.Enabled;
  228. this.Enabled = false;
  229. }
  230. /// <summary>
  231. /// 结束异步处理
  232. /// </summary>
  233. public virtual void EndAsync()
  234. {
  235. this.Enabled = this._asyncBeginStatus;
  236. if (this._asyncBeginFocused)
  237. {
  238. this.Focus();
  239. }
  240. }
  241. #endregion
  242. #endregion
  243. }
  244. }