首先,我将概述我的项目的逻辑,以便你知道我想要实现的目标。
Form1
这是主要形式。Form2
Form1
Student
,其中包含一些属性(name,id,bday),这些属性都是私有的,但有getter和setter Student
可以通过
Student s = new Student(name, int, bday);
University
,其中包含一个属性List<Student>
,如您所想,包含Students
现在我的程序意味着的工作方式是......
Form1
显示学生列表Form2
创建学生,并在点击按钮时将其添加到studentList
中的Form1
。单击此按钮时,Form2
也会关闭我想我能做的是在University
中有一个“全局”列表,Form2
更新此“全局”列表,然后Form1
显示此“全局”列表。< / p>
这是Form1
的样子
这就是Form2
的样子
我正在寻找有关如何实现这一目标的想法,以下是每个Form
可能有用的代码
Form1
private static List<Student> studentListHome;
University mainUniversity = new University(studentListHome);
public List<Student> StudentListHome
{
get
{
return studentListHome;
}
set
{
studentListHome = value;
}
}
private void Form1_Load(object sender, EventArgs e)
{
if(studentListHome != null)
{
mainUniversity.StudentList.Concat(studentListHome).ToList();
studentListBox.DataSource = mainUniversity.StudentList;
studentListBox.DisplayMember = "name";
}
}
private void studentToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 studentForm = new Form2();
studentForm.ShowDialog();
}
Form2
private string studentName;
private int studentID;
private string studentBDay;
private List<Student> studentListForm2 = new List<Student>();
Form1 homeForm ;
private void submitButton_Click(object sender, EventArgs e)
{
if (comparator(nameInput) &
comparator(idInput) &
comparator(bdayInput)){
variable_assignment();
var tempStudent = StudentCreation();
if(tempStudent != null)
{
studentListForm2.Add(tempStudent);
}
homeForm.StudentListHome = studentListForm2;
Close();
}
}
在Form2
comparator
中是一个返回bool的函数,它会检查以确保输入字段不为空。
variable_assignment
接受用户输入并将其分配给相对变量(studentName
,studentID
,studentBDay
)
StudentCreation()
是一个返回Student
的函数,它只是使用Student
studentName
studentID
的新值来实例化studentBDay
我的情况,被分配到tempStudent
正如我的代码现在,当我运行它时,我收到一个错误
An unhandled exception of type 'System.NullReferenceException' occurred in TestProjectForProject5.exe
它引用了这行代码
homeForm.StudentListHome = studentListForm2;
我猜这是因为homeForm从未实例化过。我这样做是因为我不知道如何引用当前打开的Form1
,我不想创建新的Form1
并向其发送数据,我想将数据发送到原Form1
。
所以我的问题是,如何解决此错误,并能够将数据发送到我想要做的原始Form1
,而不是新的Form1
答案 0 :(得分:0)
您收到此错误,因为您的homeForm为空。
在表单2中创建一个构造函数并传递form1的参数,类似于form2:
public Form2(From1 frm1)
{
homeForm =frm1;
}
private void submitButton_Click(object sender, EventArgs e)
{
//your code
homeForm.StudentListHome = studentListForm2;
homeForm.BindData();
Close();
}
然后传递form1的对象,类似于表单1:
private void Form1_Load(object sender, EventArgs e)
{
BindData();
}
Public Void BindData()
{
if(studentListHome != null)
{
mainUniversity.StudentList.Concat(studentListHome).ToList();
studentListBox.DataSource = mainUniversity.StudentList;
studentListBox.DisplayMember = "name";
}
}
private void studentToolStripMenuItem_Click(object sender, EventArgs e)
{
Form2 studentForm = new Form2(this);
studentForm.ShowDialog();
}