c#中的多窗口项目-从Form2更新Form1中的数据
首先,我将概述我的项目的逻辑,这样你就知道我想要实现什么c#中的多窗口项目-从Form2更新Form1中的数据,c#,winforms,C#,Winforms,首先,我将概述我的项目的逻辑,这样你就知道我想要实现什么 我有Form1,它是主要的表单 我有Form2,当在Form1 我有一个类Student,它包含一些属性(name、id、bday),这些属性都是私有的,但是有getter和setter Student可以通过 Student s=新学生(姓名、整数、日期) 我有一个类大学,它有一个属性列表,正如你所想象的,它包含一个学生的列表 现在我的程序是如何工作的 Form1显示学生列表 Form2创建学生,并在单击按钮时将他们添加到Fo
- 我有
,它是主要的表单Form1
- 我有
,当在Form2
Form1
- 我有一个类
,它包含一些属性(name、id、bday),这些属性都是私有的,但是有getter和setterStudent
Student
可以通过
Student s=新学生(姓名、整数、日期)代码>
- 我有一个类
大学
,它有一个属性列表
,正如你所想象的,它包含一个学生的列表
现在我的程序是如何工作的
Form1
显示学生列表
Form2
创建学生,并在单击按钮时将他们添加到Form1
中的studentList
<代码>表单2
单击此按钮时也会关闭
我想我能做的是在University
中有一个“全局”列表,Form2
更新这个“全局”列表,然后Form1
显示这个“全局”列表
这就是Form1
的样子
这就是Form2
的样子
我正在寻找如何实现这一点的想法,下面是每个表单中的一些代码,可能会有所帮助
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
comparator
是一个返回布尔值的函数,它检查以确保输入字段不为空
variable\u assignment
接受用户输入并将其分配给相对变量(studentName
,studentID
,studentBDay
)
StudentCreation()
是一个返回Student
的函数,它使用studentName
studentID
studentBDay
的新值来实例化Student
,在我的例子中,它被分配给tempstuent
正如我现在的代码一样,当我运行它时,我得到一个错误
TestProjectForProject5.exe中发生“System.NullReferenceException”类型的未处理异常
它引用了这行代码
homeForm.StudentListHome=studentListForm2代码>
我猜这是因为homeForm从未实例化过。我之所以这样做是因为我不知道如何引用当前打开的Form1
,我不想创建新的Form1
并向其发送数据,我想将数据发送到原始Form1
因此,我的问题是,如何修复此错误,并能够像我打算做的那样将数据发送到原始的Form1
,而不是新的Form1
,因为您的homeForm为空,所以您会收到此错误
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中创建一个构造函数并传递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的对象,类似于form1:
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();
}
将信息存储在表或任何临时容器中,然后在第二张表单中获取该信息,怎么样?或者,使用TCP/IP
listener对象?main university.StudentList.Concat(studentListHome.ToList()代码>这一行表示有一个null异常错误,请尝试在其更改为null时进行调试以查找…我认为您已将mainUniversity.StudentList对象设置为静态。。你能帮我翻译一下大学课程代码吗