确定是否从用户输入发生更改事件

Dav*_*ave 8 .net c#

在C#中,控件的Changed事件(例如,numericupdown)会被触发,无论该值是由用户直接更改还是由于某些其他事件而以编程方式更改.

有没有办法确定事件是否是由于用户输入而发生的?例如,手动更改numericUpDown1的值并单击button1将显示"value changed".如果通过用户点击控件中的向上/向下箭头而不是因为单击button1而更改了"值已更改",该怎么办?

    private void numericUpDown1_ValueChanged(object sender, EventArgs e)
    {
        MessageBox.Show("value changed");
    }

    private void button1_Click_1(object sender, EventArgs e)
    {
        numericUpDown1.Value = 3;
    }
Run Code Online (Sandbox Code Playgroud)

Grz*_*nio 5

没有好办法做到这一点.您可以找到特定情况的变通方法,例如

  • 在数字下拉列表中监听MouseDown或其他内容而不是valueChanged.
  • 在按钮单击事件处理程序中设置一个标志,该标志将禁止显示消息框.

    一般来说,您应该尝试以一种方式来组织您的表单,使得值的变化无关紧要.


fir*_*fly 5

您可以检查numericUpDown是否为ActiveControl.在按钮单击期间设置numericUpDown的值时,button1应该是ActiveControl.当用户通过numericUpDown更改值时,numericUpDown应该是ActiveControl.

if(numericUpDown1 == this.ActiveControl)
{
    MessageBox.Show("value changed");
}
Run Code Online (Sandbox Code Playgroud)