NumericUpDown的ValueChanged事件是否具有即时影响?

8
我正在用C# (.NET 4.0)编写一个小应用程序。我想要在numericUpDown值改变时触发一个事件,但它似乎只有当控件失去焦点或多次更改时才会触发 numericUpDown ValueChanged。
长描述:我正在将numericUpDown与对象的属性绑定(OnPropertyChanged),以便更改能立即反映出来。但我还需要使用这个新更改的numericUpDown的值计算一些东西(全局/与对象无关)。但如果我使用ValueChanged事件,它会太晚触发。
简短描述:我需要一个类似于OnPropertyChanged的功能事件。
我该怎么办?
编辑:在ValueChanged事件处理程序中,我对对象进行了一些计算,但是更改的值尚未提交到对象属性中,因此我认为ValueChanged事件落后了。
谢谢您的帮助。

ValueChanged事件与OnPropertyChanged事件是等价的。如果您想减少计算量,可以考虑使用Leave事件。 - Hans Passant
1
@HansPassant 问题在于,如果我使用箭头增加数字,ValueChanged事件不会触发(如果我再次按箭头,则会触发,但是它会针对先前的更改触发)。 - Ben
1
我完全无法重现这个问题。请发布能够重现该问题的代码。 - Hans Passant
当使用键盘输入数字而不是使用上/下箭头时,就会发生这种情况。想象一下控件显示“1”,你需要到达“5000”,你只需键入5000,因为这比按住上箭头直到它到达5000更容易。如果您键入数字,则事件不会在每次按键时触发,看起来它会在失去焦点时触发。 - Jcis
1个回答

9

你需要使用ValueChanged。我检查了一下,它不会在控件失去焦点时触发,也不能像你声称的那样输入多个更改。如果我快速点击三次,消息框将显示第一次点击的预期值,那就是你想要的。我不明白你说ValueChanged触发太晚的地方。它在屏幕上重新绘制之前甚至就在消息框中显示了新值。

    private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    {
        MessageBox.Show("Value changed to " + numericUpDown1.Value.ToString());
    }

4
是 .Value 属性帮了我忙,.Text 更新太晚了。 - Tom Cerul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接