Как пометить обработчик событий C # как «обработанный»? - PullRequest
3 голосов
/ 14 сентября 2009

Скажем, у меня есть кнопка в форме, которую я хочу отключить, если выполняется какое-то условие. Есть ли способ проверить это условие в обработчике события кнопки «IsEnabled» и изменить включенное состояние так, чтобы повторная установка включенного состояния не вызывала другой вызов обработчику события IsEnabled?

Позвольте мне продемонстрировать:

private void ExportResults_IsEnabledChanged (object sender, DependencyPropertyChangedEventArgs e)
{
 if (some condition)
 {
  uxExportResults.IsEnabled = false; // this will cause another call to the event handler, eventually resulting in a stack overflow
 }
}

Предположим, я запускаю событие в другом месте (которым я являюсь).

Ответы [ 3 ]

4 голосов
/ 14 сентября 2009
if (someCondition && uxExportResults.IsEnabled) { ... }

Это отключит ваш контроль, только если он включен.

3 голосов
/ 14 сентября 2009

Другой вариант - временно отключить событие следующим образом:

private void ExportResults_IsEnabledChanged (object sender, DependencyPropertyChangedEventArgs e)
{
    if (some condition)
    {
        uxExportResults.IsEnabledChanged -= ExportResults_IsEnabledChanged;
        try
        {
            uxExportResults.IsEnabled = false; // this will cause another call to the event handler, eventually resulting in a stack overflow
        }
        finally
        {
            uxExportResults.IsEnabledChanged += ExportResults_IsEnabledChanged;
        }
    }
}
2 голосов
/ 14 сентября 2009

Самое простое решение - проверить значение IsEnabled перед его установкой.

private void ExportResults_IsEnabledChanged (object sender, DependencyPropertyChangedEventArgs e)
{
  if (uxExportResults.IsEnabled == true)
  {
    uxExportResults.IsEnabled = false;
  }
}

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

public bool IsEnabled
{
  get { return isEnabled; }
  set
  {
    if(isEnabled != value)
    {
      isEnabled = value;
      IsEnabledChanged(this,args);
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...