Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 事件到NumericUpDown,仅用于用户交互_C#_Forms_Winforms_Events_Numericupdown - Fatal编程技术网

C# 事件到NumericUpDown,仅用于用户交互

C# 事件到NumericUpDown,仅用于用户交互,c#,forms,winforms,events,numericupdown,C#,Forms,Winforms,Events,Numericupdown,我的表单中有3个NumericUpDown元素。这些元素通过它们的和进行同步。例如,和为9个元素,值为3,3,3,增量为2。当用户将第一个元素从3更改为5时,我们必须得到5,2,2 对于synchronized,我曾尝试使用事件ValueChanged和VisibleChanged,但当我们进行编程修改或用户交互时,它们会起作用。 我对每个元素都使用了这个方法,但对于这个事件,当代码中其他元素的结果值发生变化时,这个方法再次开始变化 private void numericUpDown1Cha

我的表单中有3个
NumericUpDown
元素。这些元素通过它们的和进行同步。例如,和为9个元素,值为3,3,3,增量为2。当用户将第一个元素从3更改为5时,我们必须得到5,2,2

对于synchronized,我曾尝试使用事件
ValueChanged
VisibleChanged
,但当我们进行编程修改或用户交互时,它们会起作用。 我对每个元素都使用了这个方法,但对于这个事件,当代码中其他元素的结果值发生变化时,这个方法再次开始变化

 private void numericUpDown1Change(object sender, EventArgs e)
    {
        int oldValue = Sum - (int)numericUpDown2.Value - (int)numericUpDown3.Value;
        int average;
        if ((int)numericUpDown1.Value - oldValue > 0)
        {
            average = ((int)numericUpDown1.Value - oldValue) / 2;
            numericUpDown2.Value = numericUpDown2.Value - average;
            numericUpDown3.Value = numericUpDown3.Value - average;
        }
        else
        {
            average = (oldValue - (int)numericUpDown1.Value) / 2;
            numericUpDown2.Value = numericUpDown2.Value + average;
            numericUpDown3.Value = numericUpDown3.Value + average;
        }
    }
我想使用事件,当用户单击向上或向下按钮时,或者通过用户输入新值时,事件才起作用


我必须为它选择什么事件?

使用
ValueChanged
事件,但保留一个标志,告诉您更改是由代码还是由用户完成的

对于单个控件,可以在类级别保留一个布尔变量(我可能称之为
IsValueChangedByCode
),并将其设置为
false
。在方法内部,在更改值之前,将其设置为
true
,然后再设置为
false
。在事件处理程序内部,检查标志是否为
true
false
,并决定是否要执行代码


对于3个控件,逻辑是相同的,但不是使用布尔标志,而是需要2个不同的布尔值,或者可以使用整数或标志枚举。

一些代码和实际问题会有所帮助。