Возникла исключительная ситуация ComboBox в событии FormClosing winforms - PullRequest
0 голосов
/ 22 февраля 2010

Использование c # vs2008 winforms

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

Я обнаружил, что если в поле со списком добавлены элементы в конструкторе, и вы пытаетесь получить значение поля со списком в событии закрытия формы, я всегда получаю NullReferenceException .

Однако, если у comboBox есть источник данных, такой как у меня DO , в моем приложении, и я пытаюсь получить значение комбинированного списка в событии закрытия формы, то я бы сказал, 95% времени я DO НЕ получить исключение NullReferenceException, но я получаю его в 5% случаев. Это соотношение может даже варьироваться в зависимости от того, на каком компьютере я запускаю приложение. например, у меня есть 1 компьютер, на котором всегда возникает исключение.

Поэтому мой вопрос заключается в том, как (наилучшим) способом получить значение поля со списком, в последнюю очередь перед закрытием формы, не вызывая исключения. Я бы предпочел сделать это в последнюю очередь до закрытия формы, а не отслеживать его при каждом выбранном событии изменения индекса.

Любой совет приветствуется.

Ответы [ 2 ]

0 голосов
/ 22 февраля 2010

Используете ли вы свойство SelectedValue в выпадающем списке для доступа к выбранному элементу? Это возвращает ...

Объект, содержащий значение член источника данных, указанного свойство ValueMember. (MSDN)

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

0 голосов
/ 22 февраля 2010

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

Что я, вероятно, сделаю, это следующее:

protected override void OnClosing(CancelEventArgs e)
{
   // Save Value

   base.OnClosing(e);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...