【问题标题】:Why is the ValueChanged event not triggered on a NumericUpDown Control When the Value is Changed Manually?为什么手动更改值时不会在 NumericUpDown 控件上触发 ValueChanged 事件?
【发布时间】:2015-03-19 14:31:38
【问题描述】:

我在两个 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;
    }
}

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

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

【问题讨论】:

标签: c# winforms numericupdown


【解决方案1】:

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

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

【讨论】:

  • 基本上,如果你想在 using 还在打字的时候获取有效值,你真的很想注册TextChanged事件并自己解析该值。
  • @Anthony 我什至会建议,如果走那条路,当 TextChanged 事件触发时,您应该设置/重置一个计时器,然后在计时器过去时解析该值。这样,如果用户输入了多个字符,您将在他们完成输入之前进行解析。
  • 完全同意,绝对是“你想在兔子洞的深处做多深”的情况。
【解决方案2】:

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

对于 numericUpDown 组件:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2013-08-22
    相关资源
    最近更新 更多