C# combobox, присвоить текстовое значение переменной в событии потери фокуса? - PullRequest
0 голосов
/ 08 мая 2020

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

Я добавляю обработчик событий как

cbxCustID.LostFocus += new EventHandler(cbxCustID_LostFocus);

Функция выглядит следующим образом:

private void cbxCustID_LostFocus(object sender, EventArgs e)
{
    string currentText = cbxCustID.SelectedValue.ToString();  //  <-- error on this line
    loadName(currentText);
    loadDGV(currentText);
}

Даже если был выбран элемент combobox, потеря фокуса на combobox вызывает следующую ошибку. "System.NullReferenceException: 'Ссылка на объект не установлена ​​для экземпляра объекта.'"

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Используйте свойство Text:

private void cbxCustID_LostFocus(object sender, EventArgs e)
{
    string currentText = cbxCustID.Text;  
    loadName(currentText);
    loadDGV(currentText);
}
1 голос
/ 08 мая 2020

Вы получите эту ошибку, если SelectedValue равно null и вы попытаетесь вызвать для него метод ToString.

Вы можете использовать условный оператор ?. null , чтобы вернуть null раньше и избежать исключения:

string currentText = cbxCustID.SelectedValue?.ToString();

Теперь, в зависимости от ваших потребностей, вы перед вызовом других методов может потребоваться проверить, соответствует ли currentText null после этого назначения:

private void cbxCustID_LostFocus(object sender, EventArgs e)
{
    string currentText = cbxCustID.SelectedValue?.ToString();

    if (currentText != null)
    {
        loadName(currentText);
        loadDGV(currentText);
    }
}
...