Два элемента управления ссылаются друг на друга правильно - PullRequest
1 голос
/ 06 мая 2011

У меня есть элемент управления ComboBox и DateTimePicker в приложении .net формы. Желаемая функциональность для отношений двух элементов управления состоит в том, что изменение одного из них изменит значение в другом. Логика для изменения другого элемента управления есть в каждом событии изменения элемента управления; ComboBox "SelectedIndexChanged" и DateTimePicker "Изменен", и это выглядит примерно так:

othercontrol.value = value;

Есть ли какой-то четкий способ, которым я могу изолировать события изменения от соответствующих элементов управления, чтобы определить, были ли они отправлены пользовательским интерфейсом против события изменения другого элемента управления, чтобы отключить цикл, вызванный текущей настройкой?

Когда я пишу это, я понимаю, что, возможно, смогу изменить значение другого элемента управления, вызвав событие изменения и передав некоторую вариацию в аргументах из соответствующего события изменения вместо простой установки значения другого элемента управления.

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Вы можете удалить обработчик событий элемента управления перед настройкой его значения и добавить его обратно сразу после установки значения.

othercontrol.SelectedChanged -= othercontrol_SelectedChanged;
othercontrol.value = value;
othercontrol.SelectedChanged += othercontrol_SelectedChanged;
1 голос
/ 06 мая 2011

Попробуйте тогда.

Хорошо, это немного глупо, но это сработает:

private bool eventBubbledDate = false;
private bool eventBubbleCombi = false;

protected override MyCombi_OnChange(object sender, eventargs e)
{
  if (eventBubbledDate)
  {
    eventBubbledDate = false;
    return;
  }
  eventBubbleCombi = true;
  myDateTime.Value = myCombi.SelectedValue;
}

protected override MyDateTime_OnChange(object sender, eventargs e)
{
  if (eventBubbleCombi )
  {
     eventBubbleCombi = false;
     return;
  }

  // process DateStuff here
  // update other control
  eventBubbledDate = true;
}

В качестве альтернативы, вы можете использовать перечисление для отслеживания состояния вместо логических «флагов», но я думаю, что bools легче продемонстрировать.

...