2015-05-04 6 views
-2

У меня есть 3 NumericUpDown элементов в моей форме. Эти элементы синхронизируются по их сумме. Например, сумма составляет 9 значений элементов 3,3,3, а приращение равно 2. Когда пользователь меняет первый элемент с 3 до 5, мы должны получить 5,2,2.Событие для NumericUpDown для взаимодействия пользователя

Для синхронизации я пытался использовать события 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

Некоторый код и ваша фактическая проблема помогут. –

ответ

2

Используйте событие ValueChanged, но сохраните флаг, сообщающий вам, если изменение сделано кодом или пользователем.

Для одного элемента управления вы можете сохранить логическую переменную на уровне класса (я бы назвал ее IsValueChangedByCode) и установить ее на false. Внутри ваших методов, прямо перед тем, как вы измените значение, установите его на true и сразу после этого до false. Внутри обработчика события отметьте флаг true или false, и решите, хотите ли вы выполнить код или нет.

Для 3-х элементов управления логика такая же, но вместо использования логического флага требуется 2 разных логических значения, или вы можете использовать целочисленное или флаговое перечисление.