将数组项添加到组合框
问题描述:
我试图运行的C#程序应该读取包含汽车模型,制造商,年份和VIN号码的文件。将这些项目放入数组中,然后将VIN编号放入组合框,以便用户选择VIN,并在相应的文本框中分别显示相应的型号,制造商和年份。将数组项添加到组合框
当我运行该程序,我得到
错误System.ArgumentNullException:值不能为空。参数名称: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值。
答
关于我们在评论中的讨论,错误似乎是车辆[]的长度与值数不匹配,因此,循环超出了车辆列表的真实长度。
更新:
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()方法读取它当前正在处理的行,将数据流留给其余行,但只处理它。如果您的数据格式是逗号分隔格式(.csv),则需要执行其他步骤将每条读取行分割为多个值(型号,VIN等)
答
我不会使用具有固定长度。而是使用在插入项目时自动增长的List<Vehicle>
。 将项目插入到组合框中的循环嵌套在读取循环中,即您要一遍又一遍地重复添加所有项目。 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;
因此,没有必要对字符串添加到组合框,然后将其转换回车辆,一旦某一项选择。 ListBox和ComboBoxes可以直接存储任何类型的数据。
错误似乎发生在参数“item”被传递给某个不接受item为空的函数的时候。我没有在代码中看到你提供的这种调用。你能否在发生错误时请清楚。 在我看来,像Vehicle [j] .VIN为null,这意味着您的计数超过了车辆的真实长度,或者车辆的初始化出现问题,因此Vehicles []的某些值为空。 – Marcus
您可以提供代码,在哪里创建您的车辆阵列。 –
欢迎来到Stack Overflow!请通过[tour](http://*.com/tour),[帮助中心](http://*.com/help)和[如何提出一个好问题](http:// *.com/help/how-to-ask)章节,了解本网站的工作原理,并帮助您改善当前和未来的问题,从而帮助您获得更好的答案。 –