【问题标题】:Trouble with Comboboxes [closed]组合框的问题[关闭]
【发布时间】:2013-12-16 09:38:01
【问题描述】:

我在检查组合框时遇到问题。

基本上在表单加载时,代码会检查组合框是否有字符串,当找到一个字符串时,会将字符串拆分为单独的值,然后解析数据库以获取所需信息。

我想我有我需要的代码,但它不起作用

代码如下:

private void cboSelectEmp_SelectedIndexChanged(object sender, EventArgs e)
    {

        if (cboSelectEmp.Text != string.Empty && cboSelectEmp.Text != "")
        {
            SelectEmployeeInfo();
        }
        else
        {
            MessageBox.Show("");
        }
    }


    private void SelectEmployeeInfo()
    {
        string input = cboSelectEmp.Text.Trim();
        string formFirstNameValue = input.Split(' ')[0];
        string formLastNameValue = input.Split(' ')[1].Replace(",", "");
        txtFirstName.Text = formFirstNameValue;
        txtLastName.Text = formLastNameValue;   
    }

当表单加载时此代码执行并在该行抛出错误:

string formLastNameValue = input.Split(' ')[1].Replace(",", "");

**EmployeeTracker.exe 中出现“System.IndexOutOfRangeException”类型的异常,但未在用户代码中处理

附加信息:索引超出了数组的范围。**

我不知道我做错了什么,表单加载了 combobox.SelectedIndex = -1 并且 if 语句检查没有字符串值。

任何帮助将不胜感激

【问题讨论】:

  • 您的数组包含的元素少于两个,因此在索引 1 处没有可供查找的元素。当您到达那条线时,input 的值是多少?此外,您可以使用String.IsNullOrEmpty 来简化您的空字符串检查。
  • 您好,输入字符串的格式始终为 FirstName LastName, (Position) EG - John Doe, (Manager)
  • 这就是您所期望的,而不是实际的,否则您将不会收到该错误。听起来当 SelectedIndex 为 -1 时您会收到此错误,如果是这种情况,请在您的 SelectedIndexChanged 方法中添加一个检查,并且当 SelectedIndex SelectEmployeeInfo。
  • throws EmployeeTracker.exe 中发生了“System.IndexOutOfRangeException”类型的异常,但未在用户代码中处理其他信息:索引超出了数组的范围。

标签: c# .net database winforms combobox


【解决方案1】:

您引用的索引项在调用Split(); 返回的数组中不存在:

input.Split(' ')[1].Replace(",", "");

输入字符串中可能没有空格,例如:

堆栈溢出

我还会确保您在拆分之前有一些文本可以使用:

if(!string.IsNullOrWhiteSpace(cboSelectEmp.Text.Trim())
{
    string formFirstNameValue = input.Split(' ')[0];
    string formLastNameValue = input.Split(' ')[1].Replace(",", "");

    //...
}

【讨论】:

  • 您好,输入字符串的格式总是FirstName LastName, (Position)
  • 加载表单时,组合框的选定索引为 -1,这意味着 .Text 属性将为 null 或为空
  • @NattyMan0007 如果文本为空或为空,您也会收到此错误。在进行拆分之前,您需要检查是否有一些文本,例如:!string.IsNullOrWhiteSpace("");
  • 这基本上是我提供的代码,我的回答有问题吗..?
  • @NattyMan0007 它与您在 pastebin 上发布的代码相同..
【解决方案2】:

使用此代码:

private void cboSelectEmp_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (cboSelectEmp.SelectedIndex >= 0)
        {
            SelectEmployeeInfo();
        }

    }


    private void SelectEmployeeInfo()
    {

        if (!string.IsNullOrWhiteSpace(cboSelectEmp.Text.Trim()))
        {
           string input = cboSelectEmp.Text.Trim();
            if (input.Split(' ').Length > 1)
            {
                string formFirstNameValue = input.Split(' ')[0];
                txtFirstName.Text = formFirstNameValue;
                string formLastNameValue = input.Split(' ')[1].Replace(",", "");
                txtLastName.Text = formLastNameValue;
            }

        }

    }

不抛出异常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 2012-01-29
    • 2011-03-30
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多