.net 具有不同增量值的NumericUpDown

tkqqtvp1  于 2023-01-31  发布在  .NET
关注(0)|答案(2)|浏览(103)

我有一个C# WinForm应用程序,我想在其中实现NumericUpDown组件,该组件根据单击箭头按钮时是否按下控制键来递增/递减其值。如果按下控制键,它将递增1,否则递增0.1。使用ValueChanged事件不起作用,因为值已经更改。我还尝试使用Click和MouseClick事件,但它们在ValueChanged事件之后上升。
有人知道我该怎么做吗?

// This method added to either Click or MouseClick event
private void Click_Event(object sender, EventArgs e)
{
    if (Control.ModifierKeys == Keys.Control)
    {
        numSetPoint1.Increment = 1; // Setting the Increment value takes effect on the next click
    }
    else
    {
        numSetPoint1.Increment = 0.1m;
    }
}
// Event added to ValueChanged
private void ValueChanged_Event(object sender, EventArgs e)
{
    // the same here

}
xpcnnkqh

xpcnnkqh1#

一种方法是创建一个CustomNumericUpDown控件,然后交换出设计器文件中常规NumericUpDown控件的所有示例。
然后,您只需重写在源代码中实现值up-down的方法,并根据Control.ModifierKeys属性的静态值调用或不调用基类。

class CustomNumericUpDown : NumericUpDown
{
    public CustomNumericUpDown() => DecimalPlaces = 1;
    public override void UpButton()
    {
        if(ModifierKeys.Equals(Keys.Control))
        {
            Value += 0.1m;
        }
        else
        {
            // Call Default
            base.UpButton();
        }
    }
    public override void DownButton()
    {
        if (ModifierKeys.Equals(Keys.Control))
        {
            Value -= 0.1m;
        }
        else
        {
            base.DownButton();
        }
    }
}

6yt4nkrj

6yt4nkrj2#

您可以在表单级别实现它。
https://learn.microsoft.com/en-us/dotnet/desktop/winforms/input-keyboard/how-to-handle-forms?view=netdesktop-6.0
处理启动窗体的KeyPress或KeyDown事件,将窗体的KeyPreview属性设置为true。

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.ControlKey)
    {
        numSetPoint1.Increment = 1;
    }
}

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.ControlKey)
    {
        numSetPoint1.Increment = 0.1m;
    }
}

相关问题