c#中的多窗口项目 - 从Form2更新Form1中的数据

时间:2017-06-08 05:20:16

标签: c# winforms

首先,我将概述我的项目的逻辑,以便你知道我想要实现的目标。

  • 我有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的样子

enter image description here

这就是Form2的样子

enter image description here

我正在寻找有关如何实现这一目标的想法,以下是每个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接受用户输入并将其分配给相对变量(studentNamestudentIDstudentBDay

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

1 个答案:

答案 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();
    }