Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#中的多窗口项目-从Form2更新Form1中的数据_C#_Winforms - Fatal编程技术网

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
  • 我有一个类
    Student
    ,它包含一些属性(name、id、bday),这些属性都是私有的,但是有getter和setter
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对象设置为静态。。你能帮我翻译一下大学课程代码吗