使用默认按钮的 NumericUpDown 自定义增量
NumericUpDown custom increment using default Buttons
我有一个增量为 5
的 NumericUpDown 控件。使用键盘输入 1
是可能的,而且应该始终是可能的。
但是,当我单击向上按钮时,我不想使用 6
,而是使用 5
,始终使用 5
、10
、15
...
这怎么可能?在 ValueChange
中这是不可能的,因为我希望能够通过键盘输入每个数字。
您可以使用 NumbericUpDown Click 事件。单击 up/down 个按钮时调用。
private void OnClick(object sender, EventArgs e)
{
numericUpDown.Value -= numericUpDown.Value % 5;
}
编辑:由于单击文本字段时也会调用该事件,因此我提出了另一种解决方案。
您可以覆盖 NumericUpDown 方法 UpButton and DownButton 来触发事件。
public class MyNumericUpDown : System.Windows.Forms.NumericUpDown
{
public event Action OnButtonPressed;
public override void UpButton()
{
base.UpButton();
OnButtonPressed?.Invoke();
}
public override void DownButton()
{
base.DownButton();
OnButtonPressed?.Invoke();
}
}
并在 YourForm.Designer.cs 中将 this.numericUpDown = new System.Windows.Forms.NumericUpDown();
重写为 this.numericUpDown = new YourNamespace.MyNumericUpDown();
。
然后在您的表单构造器中添加:
numericUpDown.OnButtonPressed += () => numericUpDown.Value -= numericUpDown.Value % 5;
您可以从 NumericUpDown 派生自定义控件,覆盖两者 UpButton() and DownButton() 以提供自定义逻辑以应用于 Increment
值。
此处,将增量设置为 5
、NumericUpDown 按钮(以及 UP 和 DOWN 键,如果 InterceptArrowKeys 设置为 true
),将增加或减少值 5
。
如果用户使用键盘输入不同的值,该值将被接受,除非它超过 Maximum
和 Minimum
预设值。在这种情况下,控件将重置为 Maximum
或 Minimum
值。
例如,用户输入 16
:如果按下 UpButton
,则值将设置为 20
,如果 DownButton
,则设置为 15
] 被按下。
无论哪种情况,输入的值都不能超过上下限。
请注意,base.UpButton()
或 base.DownButton()
均未被调用,因为它们会使用标准方法将值调整为增量集。
class NumericUpDpwnCustomIncrement : NumericUpDown
{
public NumericUpDpwnCustomIncrement() { }
public override void UpButton() =>
Value = Math.Min(Value + (Increment - (Value % Increment)), Maximum);
public override void DownButton() =>
Value = Math.Max(Value - (Value % Increment == 0 ? Increment : Value % Increment), Minimum);
protected override void OnValueChanged(EventArgs e)
{
base.OnValueChanged(e);
Value = Math.Max(Math.Min(Value, Maximum), Minimum);
}
}
我有一个增量为 5
的 NumericUpDown 控件。使用键盘输入 1
是可能的,而且应该始终是可能的。
但是,当我单击向上按钮时,我不想使用 6
,而是使用 5
,始终使用 5
、10
、15
...
这怎么可能?在 ValueChange
中这是不可能的,因为我希望能够通过键盘输入每个数字。
您可以使用 NumbericUpDown Click 事件。单击 up/down 个按钮时调用。
private void OnClick(object sender, EventArgs e)
{
numericUpDown.Value -= numericUpDown.Value % 5;
}
编辑:由于单击文本字段时也会调用该事件,因此我提出了另一种解决方案。
您可以覆盖 NumericUpDown 方法 UpButton and DownButton 来触发事件。
public class MyNumericUpDown : System.Windows.Forms.NumericUpDown
{
public event Action OnButtonPressed;
public override void UpButton()
{
base.UpButton();
OnButtonPressed?.Invoke();
}
public override void DownButton()
{
base.DownButton();
OnButtonPressed?.Invoke();
}
}
并在 YourForm.Designer.cs 中将 this.numericUpDown = new System.Windows.Forms.NumericUpDown();
重写为 this.numericUpDown = new YourNamespace.MyNumericUpDown();
。
然后在您的表单构造器中添加:
numericUpDown.OnButtonPressed += () => numericUpDown.Value -= numericUpDown.Value % 5;
您可以从 NumericUpDown 派生自定义控件,覆盖两者 UpButton() and DownButton() 以提供自定义逻辑以应用于 Increment
值。
此处,将增量设置为 5
、NumericUpDown 按钮(以及 UP 和 DOWN 键,如果 InterceptArrowKeys 设置为 true
),将增加或减少值 5
。
如果用户使用键盘输入不同的值,该值将被接受,除非它超过 Maximum
和 Minimum
预设值。在这种情况下,控件将重置为 Maximum
或 Minimum
值。
例如,用户输入 16
:如果按下 UpButton
,则值将设置为 20
,如果 DownButton
,则设置为 15
] 被按下。
无论哪种情况,输入的值都不能超过上下限。
请注意,base.UpButton()
或 base.DownButton()
均未被调用,因为它们会使用标准方法将值调整为增量集。
class NumericUpDpwnCustomIncrement : NumericUpDown
{
public NumericUpDpwnCustomIncrement() { }
public override void UpButton() =>
Value = Math.Min(Value + (Increment - (Value % Increment)), Maximum);
public override void DownButton() =>
Value = Math.Max(Value - (Value % Increment == 0 ? Increment : Value % Increment), Minimum);
protected override void OnValueChanged(EventArgs e)
{
base.OnValueChanged(e);
Value = Math.Max(Math.Min(Value, Maximum), Minimum);
}
}