将数组项添加到ComboBox

时间:2017-10-07 14:51:55

标签: c# arrays combobox

我正在尝试运行的C#程序应该读取包含汽车模型,制造商,年份和VIN编号的文件。将这些项放入数组中,然后将VIN编号放在ComboBox中,以便用户选择VIN,相应的模型,制造商和年份各自位于各自的TextBox下面。

当我运行程序时,我得到了

  

错误System.ArgumentNullException:值不能为null。参数名称:item。

这是发生问题的代码块。

 StreamReader inputFile;

        int i = 0, count=Vehicles.Length;
        if (openFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            inputFile = File.OpenText(openFile.FileName);

            while (!inputFile.EndOfStream)
            {
                Vehicles[i].Model = inputFile.ReadLine();
                Vehicles[i].Manufacturer = inputFile.ReadLine();
                Vehicles[i].Year = inputFile.ReadLine();
                Vehicles[i].VIN = inputFile.ReadLine();
                i++;               
                for (int j = 0; j < count; j++)
                {
                 vinCBox.Items.Add(Vehicles[j].VIN);
                }
             }

为了确保VIN值实际进入数组,我打印出一个MessageBox,显示某个索引处的VIN值。

2 个答案:

答案 0 :(得分:0)

关于我们在评论中的讨论,错误似乎是车辆[]的长度与值计数不匹配,因此,循环超过了车辆列表的真实长度。

更新

 StreamReader inputFile;

    int i = 0, count=Vehicles.Length;
    if (openFile.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        inputFile = File.OpenText(openFile.FileName);

        while (!inputFile.EndOfStream)
        {
            Vehicles[i].Model = inputFile.ReadLine();
            Vehicles[i].Manufacturer = inputFile.ReadLine();
            Vehicles[i].Year = inputFile.ReadLine();
            Vehicles[i].VIN = inputFile.ReadLine();
            i++;               

         }

        for (int j = 0; j < i; j++)
        {
             vinCBox.Items.Add(Vehicles[j].VIN);
        }
     }

确保使用系统对话框打开的输入文件每行有一个条目。 ReadLine()方法读取&#34;远离&#34;它当前正在处理的行,将数据流与其余行保留在一起但只是处理它的那一行。如果您的数据格式是逗号分隔格式(.csv),则需要执行其他步骤,将每个读取行拆分为多个值(模型,VIN等)

答案 1 :(得分:0)

我不会使用具有固定长度的数组。而是使用在插入项目时自动增长的List<Vehicle>。 用于将项目插入ComboBox的循环嵌套在读取循环中,即您反复添加所有项目。 可以通过分配数据源来填充ComboBox。无需添加项目。

var Vehicles = new List<Vehicle>();
if (openFile.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
    using (var inputFile = File.OpenText(openFile.FileName)) {
        while (!inputFile.EndOfStream) {
            var v = new Vehicle {
                Model = inputFile.ReadLine(),
                Manufacturer = inputFile.ReadLine(),
                Year = inputFile.ReadLine(),
                VIN = inputFile.ReadLine()
            };
            Vehicles.Add(v);
        }
    } // The using statement closes the file automatically here.

    // Fill the listbox;
    vinCBox.DataSource = Vehicles;
}

在`Vehicle类中,重写ToString()。 ListBox自动使用此字符串显示ListBox中的项目。 您可以使用以下方法检索所选项目:

var selectedVehicle = (Vehicle)vinCBox.SelectedItem;

因此,无需在组合框中添加字符串,然后在选择项目后将其转换回车辆。 ListBoxes和ComboBoxes可以直接存储任何类型的数据。