2016-07-07 100 views
0

我更新我的問題這個 我創建新類學生C#list.add()的位置覆蓋對象0

class Student 
    { 

     private string _firstName; 
     private string _lastName; 
     private int _exam1; 
     private int _exam2; 
     private int _exam3; 
     private int _finalExam; 


     // First Name Property 
     public string FirstName 
     { 
      get { return _firstName; } 
      set { _firstName = value; } 
     } 

     //Last Name Property 
     public string LastName 
     { 
      get { return _lastName; } 
      set { _lastName = value; } 
     } 

     //Exam 1 Property 
     public int Exam1 
     { 
      get { return _exam1; } 
      set { _exam1 = value; } 
     } 

     // Exam 2 Property 
     public int Exam2 
     { 
      get { return _exam2; } 
      set { _exam2 = value; } 
     } 

     //Exam 3 Property 
     public int Exam3 
     { 
      get { return _exam3; } 
      set { _exam3 = value; } 
     } 

     //Final Exam Property 
     public int FinalExam 
     { 
      get { return _finalExam; } 
      set { _finalExam = value; } 
     } 
    } 
} 

這是一個方法,我添加新的學生窗體類添加新的學生

public class AddStudent : Form 
    { 

     StudentForm stu = null; 

     public AddStudent() 
     { 
      InitializeComponent(); 
      stu = new StudentForm(); 
      stu.Show(); 

     } 

     private void btnSubmit_Click(object sender, EventArgs e) 
     { 
      // split the name into first and last name 
      string[] name = txtName.Text.Split(','); 
      Student std = new Student(); 
      std.FirstName = name[0]; 
      std.LastName = name[1]; 
      std.Exam1 = Int32.Parse(txtExam1.Text); 
      std.Exam2 = Int32.Parse(txtExam2.Text); 
      std.Exam3 = Int32.Parse(txtExam3.Text); 
      std.FinalExam = Int32.Parse(txtFinal.Text); 
      stu.addItem(std); 
      this.Hide(); 
     } 
    } 
} 

,這是它具有列表框中顯示的學生名單我的主要形式

public class StudentForm : Form 
    {    
     public StudentForm() 
     { 
      InitializeComponent(); 
     } 

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

     public void addItem(Student std) 
     { 

      students.Add(std); 
      // it always show me 1 item in list 
      MessageBox.Show(students.Count.ToString()); 

     } 
} 
+0

這部分似乎很奇怪 - 'std.addItem(STD);' - 您要添加的表單項目本身?我懷疑你看到第一項被覆蓋的原因是因爲你每次都創建一個_new_'Student',但是你的類結構使得它很混亂。 –

+0

@DStanley不,它非常有意義。 OP有一個表單,其中包含該表單的列表,OP將創建該表單的一個新實例,並將其自動添加到列表中。這個的目的和最後一句一樣清楚。 –

+0

其實我正在學習c#可以請你說說我的想法嗎? –

回答

0

這是因爲你每次使用該行創建Student形式:

Student std = new Student(); 

所以每次你點擊提交按鈕時,您正在創建這將創建一個新的空public List<Student>

一種新形式的學生你需要從UI(StudentForm)和(AddStudentForm)獨立模型(Student):

public class Student 
{ 
    public string FirstName { set; get; } 
    private string LastName { set; get; } 
    private int Exam1 { set; get; } 
    private int Exam2 { set; get; } 
    private int Exam3 { set; get; } 
    private int FinalExam { set; get; } 
} 

你並不需要創建一個新的StudentFormê當你添加一個Student。相反,在導航到添加屏幕時,您可以有一個StudentForm並使用ShowDialog(),這可以返回到StudentForm的相同實例。

+0

任何想法來解決這個問題? –

+0

@SaqibSaqib'Student' UI屏幕有什麼?它是你的入口點嗎?或者'AddStudent'是你的第一個屏幕? – user3185569

+0

它有一個列表框來顯示學生列表和一個菜單項目,以添加新學生列表 –

1

是的,每當您創建Student表格的新實例並調用addItem()方法時,都會導致您的btnSubmit_Click錯誤。

你,而這個字段移動到一個單獨的類象

public class Data 
{ 
    private string _firstName; 
    private string _lastName; 
    private int _exam1; 
    private int _exam2; 
    private int _exam3; 
    private int _finalExam; 
} 

必須在創建的窗體實例啓動像

public partial class AddStudent : Form 
    { 

Student stu = null; 
public AddStudent() 
{ 
    InitializeComponent(); 
    stu = new Student(); 
    stu.Show(); 
} 

變化Form1中

public List<Data> students = new List<Data>(); 

列表在按鈕點擊只需添加Data實例,如

private void btnSubmit_Click(object sender, EventArgs e) 
    { 
     // split the name into first and last name 
     string[] name = txtName.Text.Split(','); 
     Data std = new Data(); 
     std.FirstName = name[0]; 
     std.LastName = name[1]; 
     std.Exam1 = Int32.Parse(txtExam1.Text); 
     std.Exam2= Int32.Parse(txtExam2.Text); 
     std.Exam3 = Int32.Parse(txtExam3.Text); 
     std.FinalExam = Int32.Parse(txtFinal.Text); 
     stu.addItem(std); 
     this.Hide(); 
    } 
+0

你能給我任何想法嗎? –

+0

@SaqibSaqib,是的,請參閱編輯答案。 – Rahul

+0

我這樣做,但同樣的問題 –

3

這裏是你的代碼是如何進展,與添加註釋和代碼無關去除:

private void btnSubmit_Click(object sender, EventArgs e) 
{ 
    ... 
    // create a _new_ Student form 
    Student std = new Student(); 

    ... 

    // Add the student form to itself (huh?) 
    std.addItem(std); 

    // hide this form 
    this.Hide(); 

    // show the new form 
    std.Show(); 
} 

所以,你總是顯示一個項目的新形式 - 這是剛剛創建的。

+0

給我的想法,請 –

+0

我就只有一個_form_對象和多個_data_對象。看起來你正在使用一個類('Student')來表示一個表單和數據,這是一個令人困惑的程序。在這個問題得到解決之前,我可以清楚地看到如何讓程序去做你想做的事情。 –

+0

我已經更新了我的問題與另一個類 –

-1

嘗試取出Class Student實例化出了大事 - btnSubmit_Click event Student std = new Student();