Один метод успешно переключает свойство элемента управления «Включено» — аналогичный метод завершается с ошибкой. Почему?

#c# #asp.net

#c# #asp.net

Вопрос:

В моем коде у меня есть два метода для включения или отключения группы элементов управления в зависимости от значения поля в форме. Один из этих методов работает должным образом, а другой — нет… вполне. Тот, который работает, зависит от значения флажка, в то время как другой зависит от значения выпадающего списка (я считаю, что это различие не имеет значения — я упоминаю его только для полноты картины). Я упростил эти методы для удобства чтения, но единственное существенное отличие от производственной системы заключается в том, что они устанавливают несколько элементов управления, а не только один.

     private void SetControlsFromDropDown(int statusID)
    {
        // This method doesn't work
        bool enable = (statusID == (int)ReqStatus.CompletedOK)
        this.myTextBox.Enabled = enable;
    }


    private void SetControlsFromCheckBox(bool enable)
    { 
        // This method works
        cboMyDropDown.Enabled = enable;
    }
  

Ошибка первого метода заключается в том, что он правильно устанавливает элементы управления при загрузке формы. Однако при изменении выпадающего списка вызывается метод и значение переменной bool «enable» устанавливается правильно, и код выполняется, как и ожидалось (и просмотр свойства Enabled устанавливаемых элементов управления показывает, что они переключаются, как ожидалось) — НОНО элементы управления остаются неизменными в интерфейсе. Итак, если для них изначально было установлено значение Enabled = false, они остаются отключенными, даже если метод мог установить для них значение Enabled = true .

Что вызывает у меня беспокойство, так это то, что если я помещаю параметр this.myTextoxBox во второй метод, он переключается правильно.

У меня создается впечатление, что я не очень четко объяснил себя. По сути, два более или менее идентичных метода, вызываемых из похожих событий, работающих, возможно, неразличимыми способами, ведут себя по-разному в режиме реального времени. Один переключит свойство Enabled группы элементов управления ad lib., в то время как другой переключит его один раз, чтобы никогда не переключаться снова.

Любые мысли с благодарностью получены.

Эдвард

Комментарии:

1. Думаю, нам нужно больше контекста. Как вызывается SetControlsFromDropDown ? Вызывается ли он в OnInit или во время обработчика событий и т. Д.? Жизненный цикл события очень важен, особенно если вы устанавливаете Enabled после того, как элемент управления уже отрисован.

2. Оба метода вызываются из обработчиков событий; флажок из события onCheckedChanged и выпадающий список из события OnSelectedIndexChanged . Я знаю, что оба метода вызываются правильно, потому что точки останова достигаются во время выполнения. Тем не менее, я думаю, что возможно (хотя я не совсем понимаю, как), что нефункционирующий метод запускается после визуализации элементов управления.

Ответ №1:

Проблема была вызвана сбоем мозга. Я получал неверное значение из выпадающего списка. Приносим извинения за потраченное впустую время.

Комментарии:

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

Ответ №2:

Я не совсем уверен в этом, но попробуйте удалить «это»

Просто введите следующее:

 myTextBox.Enabled = enable;
  

Комментарии:

1. В его методе, как показано, удаление this не имеет значения, поскольку локальное значение не названо myTextBox .

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