C# 组合框,在焦点丢失事件上将文本值分配给变量?

C# combobox, assign text value to variable on focus lost event?

我有一个加载了客户 ID 的组合框。我有一个函数可以在选择组合框项目时执行一些查询,但是如果用户输入一个值,当前功能不会执行任何操作。我正在尝试使用组合框的焦点丢失事件来实现此功能,但是我当前的尝试在焦点丢失时返回空值。

我正在添加一个事件处理程序作为

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);
}

即使选择了组合框项目,但在组合框上失去焦点也会产生以下错误。 "System.NullReferenceException: 'Object reference not set to an instance of an object.'"

如果有人有任何建议或能够在正确的方向上提供帮助,我们将不胜感激。

如果 SelectedValuenull 并且您尝试对其调用 ToString 方法,您将收到该错误。

您可以尽早使用 ?. null conditional operator 到 return 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);
    }
}

使用 Text 属性:

private void cbxCustID_LostFocus(object sender, EventArgs e)
{
    string currentText = cbxCustID.Text;  
    loadName(currentText);
    loadDGV(currentText);
}