MyUiNumberInput.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using Sunny.UI;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Windows.Forms;
  9. using Permission;
  10. public class MyUiNumberInput :MyUiInput,IWithMinMaxValue
  11. {
  12. [Category("MyControl")]
  13. [Description("允许输入的最小值")]
  14. public new double Minimum { get => base.Minimum; set { base.Minimum = value; } }
  15. [Category("MyControl")]
  16. [Description("允许输入的最大值")]
  17. public new double Maximum { get => base.Maximum; set => base.Maximum = value; }
  18. [Category("MyControl")]
  19. [Description("限值变化时")]
  20. public event MinMaxValueChanged MinMaxValueChanged;
  21. [Category("MyControl")]
  22. [Description("输入的数据类型")]
  23. //[DefaultValue(UIEditType.Integer)]
  24. public new UIEditType Type { get=> type; set { base.Type = value; type = value; } }
  25. private UIEditType type=UIEditType.Integer;
  26. public MyUiNumberInput()
  27. {
  28. }
  29. protected override void OnCunstomClick(EventArgs e)
  30. {
  31. // 执行软键盘逻辑(由子类或当前类决定)
  32. if (UseSoftKeyboard)
  33. {
  34. ShowSoftKeyboard();
  35. }
  36. }
  37. protected virtual void OnMinMaxValueChanged(double minimum, double maximum)
  38. {
  39. MinMaxValueChanged?.Invoke(this, minimum, maximum);
  40. }
  41. protected virtual void ShowSoftKeyboard()
  42. {
  43. if (this.Type == UIEditType.Integer)
  44. {
  45. var kb = new NumberKeybordForm((int)Maximum, (int)Minimum, IntValue);
  46. var dr = kb.ShowDialog();
  47. if (dr == DialogResult.OK)
  48. {
  49. if (kb.LimitChanged)
  50. {
  51. this.Minimum = kb.Minimum;
  52. this.Maximum = kb.Maximum;
  53. OnMinMaxValueChanged(kb.Minimum, kb.Maximum);
  54. }
  55. if (kb.ValueChanged)
  56. {
  57. IntValue = Convert.ToInt32(kb.Value);
  58. }
  59. }
  60. }
  61. else if (this.Type == UIEditType.Double)
  62. {
  63. var kb = new NumberKeybordForm(Maximum, Minimum, DoubleValue);
  64. var dr = kb.ShowDialog();
  65. if (dr == DialogResult.OK)
  66. {
  67. if (kb.LimitChanged)
  68. {
  69. this.Minimum = kb.Minimum;
  70. this.Maximum = kb.Maximum;
  71. OnMinMaxValueChanged(kb.Minimum, kb.Maximum);
  72. }
  73. if (kb.ValueChanged)
  74. {
  75. DoubleValue = Convert.ToDouble(kb.Value);
  76. }
  77. }
  78. }
  79. }
  80. }