NumericUpDown 事件仅用于用户交互
Event to NumericUpDown for only user interaction
我的表单中有 3 个 NumericUpDown
元素。该元素通过它们的总和同步。例如,总和是 9 个元素,值是 3、3、3,增量是 2。当用户将第一个元素从 3 更改为 5 时,我们必须得到 5、2、2。
对于同步,我曾尝试使用事件 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
事件,但保留一个标志,告诉您更改是由代码还是用户完成的。
对于单个控件,您可以将布尔变量保持在 class 级别(我可能将其称为 IsValueChangedByCode
)并将其设置为 false
。在您的方法中,就在您更改值之前,将其设置为 true
,然后立即返回 false
。在事件处理程序中检查标志是 true
还是 false
,然后决定是否要执行代码。
对于 3 个控件,逻辑是相同的,但不是使用布尔标志,而是需要 2 个不同的布尔值,或者您可以使用整数或标志枚举。
我的表单中有 3 个 NumericUpDown
元素。该元素通过它们的总和同步。例如,总和是 9 个元素,值是 3、3、3,增量是 2。当用户将第一个元素从 3 更改为 5 时,我们必须得到 5、2、2。
对于同步,我曾尝试使用事件 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
事件,但保留一个标志,告诉您更改是由代码还是用户完成的。
对于单个控件,您可以将布尔变量保持在 class 级别(我可能将其称为 IsValueChangedByCode
)并将其设置为 false
。在您的方法中,就在您更改值之前,将其设置为 true
,然后立即返回 false
。在事件处理程序中检查标志是 true
还是 false
,然后决定是否要执行代码。
对于 3 个控件,逻辑是相同的,但不是使用布尔标志,而是需要 2 个不同的布尔值,或者您可以使用整数或标志枚举。