【问题标题】:NumericUpDown ValueChanged event with immediate consequences?NumericUpDown ValueChanged 事件会立即产生后果吗?
【发布时间】:2012-06-23 10:55:54
【问题描述】:

我正在用 C# (.NET 4.0) 编写一个小型应用程序。我想在 numericUpDown 中的值更改时触发一个事件,但似乎 numericUpDown ValueChanged 在控件失去焦点或有多个更改时触发。

详细说明: 我将 (OnPropertyChanged) numericUpDown 与对象的属性绑定,以便立即反映更改。但我还需要使用这个新更改的 numericUpDown 值来计算一些东西(全局/与对象无关)。但是如果我使用 ValueChanged 事件,它触发得太晚了。

简短说明:

我需要一个与 OnPropertyChanged 功能相似的事件。

我能做什么?

编辑: 在 ValueChanged 事件处理程序中,我对对象进行了一些计算,但已更改的值尚未提交给对象属性,因此我认为 ValueChanged 事件落后了。

感谢您的帮助。

【问题讨论】:

  • ValueChanged 事件绝对等同于 OnPropertyChanged 类型的事件。如果您想减少计算量,请考虑使用 Leave 事件。
  • @HansPassant 问题是,如果我使用箭头来增加数字,ValueChanged 事件不会触发(如果我再次按下箭头会触发,但会触发之前的更改)。
  • 我对此一无所知。发布重现问题的代码。
  • 当数字输入 keyb 时会发生这种情况,而不是使用向上/向下箭头。想象一下控件显示“1”并且您需要到达“5000”,您只需输入 5000,因为它比按住向上箭头直到到达 5000 更容易。如果您输入数字,事件将不会触发每次按键,看起来它都会在失去焦点时触发。

标签: c# event-handling numericupdown


【解决方案1】:

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

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

【讨论】:

  • 帮助我的是 .Value 属性。 .Text 更新太晚了。
猜你喜欢
  • 2013-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
相关资源
最近更新 更多