2017-06-07 27 views
0

Ich habe eine Form1, die eine Liste der Schüler in einem ListBox zeigt.Hinzufügen von Elementen aus einer Liste zu einer anderen Liste in einem anderen Formular in C#

Ich benutze Form2, um diese Liste von Studenten zu füllen, gut möchte ich.

Form2 ist für die Aktualisierung der in Form1 bei jedem Klicken auf eine Schaltfläche in Form2 vorgesehen.

was ich versuche herauszufinden, wie man das eigentlich macht? Weil ich habe versucht, diese

Form1:

public List<Student> studentList_Form1; 

public List<Student> StudentList_Form1 
{ 
    get 
    { 
     return studentList_Form1; 
    } 
} 

Form2:

public List<Student> studentList = new List<Student>(); 

private void update_main_student_list() 
{ 
    using (Form1 newForm = new Form1()) 
    { 
     foreach(Student s in studentList) 
     { 
      newForm.StudentList_Form1.Add(s); 
     }     
    } 
    //As well as the code to populate studentList 
} 

Aber ich erhalte eine Fehlermeldung, ich brauche zu überprüfen, ob s, wenn null, bevor ich es verwenden .

Student ist eine Klasse, die aus einem String name, String-Adresse, int id

+0

Ihre Liste aus form1 wird re = initialisiert, da Sie eine Instanz für Form1 erstellen "using (Form1 newForm = new Form1())", Sie müssen keine Instanz erstellen –

+1

Die 'studentList_Form1' wird gelesen Nur damit Sie '.Add()', '' newForm' 'nicht aufrufen können und das Formular, das Sie gerade sehen, zwei verschiedene Instanzen der gleichen Klasse sind, schlage ich vor, Delegate für diesen Kommunikationstyp zu verwenden. –

+0

@ un-lucky - Es ist eine schreibgeschützte Referenz, also '. Add()' ist in Ordnung – Igor

Antwort

0

Der Code, den Sie können keinen Fehler über snull zu sein haben gezeigt, hergestellt wird.

Der Fehler besagt, dass studentList_Form1 in Form1null ist.

Aber der Code ist immer noch sinnlos. Sie müssen studentList_Form1 aus einem vorhandenen Form1 (die Liste muss irgendwann instanziiert sein) verwenden, um Objekte hinzuzufügen.

0

in Form1

sollten Sie neue Liste < Studenten>() hinzufügen; wenn definieren studentList_Form1

public List<Student> studentList_Form1 = new List<Student>(); 

public List<Student> StudentList_Form1 
{ 
    get 
    { 
     return studentList_Form1; 
    } 
} 
0

die Liste studentList_Form1 als statisch in Form1 Stellen stattdessen eine neue Form der Schaffung

private static List<Student> studentList_Form1 = new List<Student>(); 

public static List<Student> StudentList_Form1 
{ 
    get 
    { 
     return studentList_Form1; 
    } 
} 
+0

Ich kann nicht glauben, dass jemand diesen Vorschlag upvoted. – Igor

+0

@Igor können Sie dann eine bessere Lösung bieten? – Akansha

+0

Der TS muss seinen Code so strukturieren, dass die Referenz der Liste von der ersten zur zweiten gegeben wird. – Igor

-1

Form1:

private List<Student> studentList_Form1=new List<Student>(); 

     public List<Student> StudentList_Form1 
     { 
      get 
      { return studentList_Form1; } 
     } 

Um Form2 zu laden:

Form2 frm = new Form2(this); 
      frm.ShowDialog(); 

Form2:

Form1 frm1;  
    public List<Student> studentList = new List<Student>(); 

    public Form2(Form1 frm) 
      { 
       InitializeComponent(); 
       frm1 = frm; 

       for (int i = 0; i < 10; i++) 
        studentList.Add(new Student() { studentId = i, studentName = "Student " + i }); 

      } 

Artikel zu studentList hinzuzufügen, die in Form1 existiert:

private void button1_Click(object sender, EventArgs e) 
     { 
      foreach (var std in studentList) 
       frm1.StudentList_Form1.Add(std); 
     } 
+0

Was, wenn das Formular2 kein Kind von Form1 ist? – Akansha

+0

dann wie auf die Liste von Form1 zugreifen, wenn Form1 nicht ein Elternteil von Form2 ist –

+0

Ich bekomme immer noch den gleichen Fehler. – Dave

0

ein Ereignis in Form2 erstellen und dieses Ereignis in Form1 abonnieren. Aktualisieren Sie die Liste im Ereignishandler von Form1.

Verwandte Themen