определить причину этой ошибки, флажок c # - PullRequest
0 голосов
/ 17 апреля 2011

Привет всем, мне трудно понять, почему какой-то код, который у меня есть, вылетает. Проблемные инструкции выглядят так:

Первая попытка:

        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 в отладчике, вызов обработчика события для события не отображается, поэтому я вижу только строку, где каждый объект был в хорошем состоянии для выполнения. их действия

Ответы [ 2 ]

2 голосов
/ 17 апреля 2011

Похоже, IncrementalCB это null. Было ли оно инициализировано при попытке выполнить код?

1 голос
/ 17 апреля 2011

Похоже, переменная CheckState равна нулю, когда вы пытаетесь получить доступ к свойству Checked:

CheckState.Checked
...