为什么手动更改值时不会在 NumericUpDown 控件上触发 ValueChanged 事件?

Why is the ValueChanged event not triggered on a NumericUpDown Control When the Value is Changed Manually?

我将代码附加到两个 NumericUpDown 控件的 ValueChanged 事件:

private void numericUpDownHeight_ValueChanged(object sender, EventArgs e)
{
    if (checkBoxRetainRatio.Checked)
    {
        numericUpDownWidth.Value = numericUpDownHeight.Value;
    }
}

private void numericUpDownWidth_ValueChanged(object sender, EventArgs e)
{
    if (checkBoxRetainRatio.Checked)
    {
        numericUpDownHeight.Value = numericUpDownWidth.Value;
    }
}

当我使用控件的 up/down 箭头更改编辑框中的值时,这很有效;但是如果我手动编辑该值(例如,当我想将它从 100 更改为 25 时,并且可以在六次击键中手动完成,而增加 5,则使用向下箭头需要 15 次),事件不会触发.

有没有一种快速的方法来解决这个相当轻微的问题(IOW,如果需要一些非常神秘和棘手的事情来完成它,我不会打扰)。

要发生 ValueChanged 事件,可以在代码中更改值 属性,方法是单击向上或向下按钮,或者用户输入一个由控件读取的新值。当用户按下 ENTER 键或导航离开控件时,将读取新值。如果用户输入一个新值,然后单击向上或向下按钮,ValueChanged 事件将发生两次。

来源:https://msdn.microsoft.com/en-us/library/system.windows.forms.numericupdown.valuechanged%28v=vs.110%29.aspx

我会使用包含最新值的 sender.Value。您必须将其转换为发件人的类型。

对于 numericUpDown 组件:

((System.Windows.Forms.NumericUpDown)(sender)).Value.ToString()