Привет всем, мне трудно понять, почему какой-то код, который у меня есть, вылетает. Проблемные инструкции выглядят так:
Первая попытка:
bool aers = vm_SessionTab.IncrementalConstruction; // != null
bool chua = IncrementalCB.Checked; // != null
if (aers) IncrementalCB.CheckState = CheckState.Checked; // crash, null reference exception
Вторая попытка:
bool aers = vm_SessionTab.IncrementalConstruction; // != null
bool chua = IncrementalCB.Checked; // != null
IncrementalCB.Checked = vm_SessionTab.IncrementalConstruction //crash, null reference exception
IncrementalCB - это CheckBox. vm_SessionTab - персонализированный объект, который содержит статус, который я хочу показать.
Когда я вступил с отладчиком, я обнаружил, что «aers» и «chua» отличаются от нуля. Затем в следующих двух попытках сбой программы говорит мне, что происходит исключение нулевой ссылки. Я спрашиваю, как это происходит. Я явно проверяю, что оба значения отличны от нуля: S. Полный код довольно большой, но это соответствующие строки.
Подробнее:
Я действительно уверен, что IncrementalCB имеет значение! = Null, но если я создаю еще один флажок, предшествующий коду, который я показал, то не исключение - throw, и элемент управления отображается правильно. Почему мне нужно восстановить контроль, если он уже там?
Это работает:
IncrementalCB = new CheckBox(); //i think this is unnecesary, it exists.
bool aers = vm_SessionTab.IncrementalConstruction;
bool chua = IncrementalCB.Checked;
if (aers) IncrementalCB.CheckState = CheckState.Checked;
отредактировано, чтобы добавить…
Спасибо, ребята, за предложение посмотреть трассировку стека. В этом я вижу ужасную ошибку, которую я совершил. В объяснении псевдокода это была моя ошибка: (Я пытаюсь применить шаблон MVVP)
Call the View Constructor
Create the Presenter that manage the view.
at the end of the Presenter constructor i callback a method to show in the View the basic UI elements.
callback: .
in the view i load differents UI elements ... presenter contructor not yet finalized
i modify the value of the checkbox, trying to do it ...
directly.
ERROR->the modification is not realized directly and the ...
event handler of the Checked_Changed event is raised.
The presenter has te responsability to perform ...
the change, but.................................> ... presenter constructor not yet finalized
Таким образом, результатом является нулевое ссылочное исключение, когда еще не завершившемуся докладчику предлагается завершить изменение. Поскольку у меня нет доступа к внутреннему полю Checked, чтобы выполнить прямое изменение без возникновения события Checked_Changed, мне нужно убрать обратный вызов.
Ошибка была немного трудной для понимания, потому что, когда я переключаюсь с помощью f11 в отладчике, вызов обработчика события для события не отображается, поэтому я вижу только строку, где каждый объект был в хорошем состоянии для выполнения. их действия