C# 事件到NumericUpDown,仅用于用户交互
我的表单中有3个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
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个不同的布尔值,或者可以使用整数或标志枚举。一些代码和实际问题会有所帮助。