Событие для NumericUpDown только для взаимодействия с пользователем
У меня 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;
}
}
Я хочу использовать событие, которое работало только когда пользователь нажимал кнопку вверх или вниз или когда пользователь вводил новое значение.
Какое событие я должен выбрать для этого?
1 ответ
Использовать ValueChanged
событие, но держите флажок, сообщающий вам, если изменение сделано кодом или пользователем.
Для одного элемента управления вы можете хранить булеву переменную на уровне класса (я бы назвал ее IsValueChangedByCode
) и установите его false
, Внутри ваших методов, прямо перед изменением значения, установите его на true
и сразу после этого обратно false
, Внутри обработчика событий проверьте, что флаг true
или же false
и решить, хотите ли вы выполнить код или нет.
Для трех элементов управления логика одинакова, но вместо использования логического флага вам нужно 2 различных логических значения, или вы можете использовать целочисленное значение или перечисление флагов.