将尝试仅发布相关代码,因为我的程序已经很大了。基本上,该程序将客户信息添加到数组列表结构中。我的存储、保存和文件加载工作完美无缺,但是当我试图显示数据时,我遇到了异常。
大多数主要代码都在一个与表单分开的类上,这个特殊的调用来自“frmViewRecords”。
public void ViewData(int currentRecord)
{
string fn = ((custDetails)datalist[currentRecord]).firstName;
frmViewRecords viewRecords = new frmViewRecords();
viewRecords.WriteData(fn);
}
上面的代码是导致异常的原因,但下面的消息框代码可以正常工作。
public void LoadData()
{
bool fileLoaded = false;
//Load the database
try
{
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read); //Create the filestream
try
{
BinaryFormatter bf = new BinaryFormatter(); //New binary formatter for deserialization
datalist = (ArrayList)bf.Deserialize(fs);
fileLoaded = true; //Update the fileLoaded bool so that it doesn't open the file dialog instance
recordCount = datalist.Count;
MessageBox.Show("" + filename + " loaded successfully."); //Inform the user that the file was automatically loaded
MessageBox.Show("Test: " + ((custDetails)datalist[0]).firstName);
}
catch
{
MessageBox.Show("Could not de-serialise from " + filename, "FILE LOADING PROBLEM", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
fs.Close();
}
catch
{
if (MessageBox.Show("File isn't in the right location, this is normal if a dataset does not yet exist.\n\n If the file exists elsewhere click no and you will be prompted to find the database file, else click yes to create a default file.", "FILE LOADING PROBLEM", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes)
{
fileLoaded = true;
CreateDefaultData();
}
}
我试过'string fn = ((custDetails)datalist[0]).firstName;' 以确保它不是导致问题的变量,并且异常仍然发生。我几乎没有想法。问题不能与结构或数组列表定义有关,因为 LoadData() 中的消息框可以正常工作并输出正确的信息。我尝试将消息框移动到 ViewData 方法,这也开始给出异常,所以我只能假设我的方法有问题?
这些方法位于“MainClass.cs”上,下面是我从 frmViewRecords 调用该方法的方式:
MainClass mainClass = new MainClass();
int currentRecord = 0;
private void LoadData()
{
mainClass.ViewData(currentRecord);
}
值得一提的是,以前,我直接从 frmViewRecords 调用数据,如下所示:
txtFirstName.Text = ((MainClass.custDetails)mainClass.datalist[currentRecord].firstName;
但是在消息框提示起作用时遇到相同的异常后,我将其重写为上面的内容,但仍然遇到问题,所以我不知道是什么原因造成的。