2012-10-27 100 views
-2

我有一个主要的问题使这项工作。我需要做的就是让我的数组显示。C#阵列 - “对象引用不设置到对象的实例”

namespace OOP_3 
{ 
    public partial class Add_Child : Form 
    { 
     public Add_Child() 
     { 
      InitializeComponent(); 
     } 

     private void btnAddChild_Click(object sender, EventArgs e) 
     { 
      Mother m = new Mother(); 
      m.MyChildren = new Child[3]; 

      int ID = int.Parse(txtID.Text); 
      string FNAME = txtFname.Text; 
      string LName = txtLname.Text; 
      DateTime DOB = DateTime.Parse(txtDob.Text); 
      //Add children 

      label5.Text = m.GetMyChildrenDetails(); 
      if (addtoarray(m,ID,FNAME,LName,DOB) == true) 
      { 
       MessageBox.Show("added", "Add Child"); 
      } 
      else 
      { 
       MessageBox.Show("cannot add", "Child add - full"); 
      } 
     } 

     public bool addtoarray(Mother m, int ID, string FNAME, string LName,DateTime DOB) 
     { 
      for (int i = 0; i < m.MyChildren.Length; i++) 
      { 
       if (m.MyChildren[i]== null) 
       { 
        m.MyChildren[i] = new Child(m); //See comment below 
        m.MyChildren[i].ChildId = ID; 
        m.MyChildren[i].FirstName = FNAME; 
        m.MyChildren[i].LastName = LName; 
        m.MyChildren[i].DateOfBirth = DOB; 
        return true; 
       } 
      } 
      return false; 
     } 
    } 
} 

从代码注释:此行会破坏堆一切,重建阵列造成我有值,不会在我label5.text香港专业教育学院出现在琢磨研究了好几个小时,我认为IAM要么会疯了还是我的编码,该编码IAM :)请一些帮助将是不错只是noobie:)...... 如果需要的话,我会后我的课的和主要形式了:)

public class Mother 
{ 
    //Fields 
    private int motherId; 
    private string firstName; 
    private string lastName; 
    private string mobile; 
    private Child[] myChildren; //mother "has a" many children 

    //props 
    public Child[] MyChildren 
    { 
     get { return myChildren; } 
     set { myChildren = value; } 
    } 

    public string Mobile 
    { 
     get { return mobile; } 
     set { mobile = value; } 
    } 

    public string LastName 
    { 
     get { return lastName; } 
     set { lastName = value; } 
    } 

    public string FirstName 
    { 
     get { return firstName; } 
     set { firstName = value; } 
    } 

    public int MotherId 
    { 
     get { return motherId; } 
     set { motherId = value; } 
    } 

    //constructors 

    //methods 
    //Get Mother Details 
    public override string ToString() 
    { 
     return motherId + ", " + firstName + ", " + lastName + ", " + mobile; 
    } 

    //AddChild 
    public bool AddChild(Child myChild) 
    { 
     for (int i = 0; i < myChildren.Length; i++) 
     { 
      if (myChildren[i] != null) 
      { 
       myChildren[i] = myChild; 
       return true; 
      } 
     } 

     return false; 
    } 

    //GetMyChildrenDetails 
    public string GetMyChildrenDetails() 
    { 
     string msg = ""; 
     for (int i = 0; i < myChildren.Length; i++) 
     { 
      if (myChildren[i] != null) 
      { 
       msg += "\n" + myChildren[i]; 
      } 
     } 
     return msg; 
    } 

public class Child 
{ 
    //fields 
    private int childId; 
    private string firstName; 
    private string lastName; 
    private DateTime dateOfBirth; 
    private Mother myMother; //child "has a" mother 

    //props 
    public Mother MyMother 
    { 
     get { return myMother; } 
     set { myMother = value; } 
    } 

    public DateTime DateOfBirth 
    { 
     get { return dateOfBirth; } 
     set { dateOfBirth = value; } 
    } 

    public string LastName 
    { 
     get { return lastName; } 
     set { lastName = value; } 
    } 

    public string FirstName 
    { 
     get { return firstName; } 
     set { firstName = value; } 
    } 

    public int ChildId 
    { 
     get { return childId; } 
     set { childId = value; } 
    } 

    //constructors 
    //Child cannot be created without a mother 
    public Child(Mother myMother) 
    { 
     this.myMother = myMother; 
    } 
    //Child cannot be created without a mother 
    public Child(Mother myMother, int childId) 
    { 
     this.myMother = myMother; 
     this.childId = childId; 
    } 

    //methods 
    //Get Child Details 
    public override string ToString() 
    { 
     return childId + ", " + firstName + ", " + lastName + ", " + dateOfBirth; 
    } 

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void btnRegister_Click(object sender, EventArgs e) 
    { 

    } 

    private void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) 
    { 

    } 

    private void closeToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     Close(); 
    } 

    private void BtnAddChild_Click(object sender, EventArgs e) 
    { 
     Add_Child child = new Add_Child(); 
     child.Show(); 
    } 

    private void btnRegister_Click_1(object sender, EventArgs e) 
    { 
     //create a mother object 
     Mother m = new Mother(); 
     m.MotherId = int.Parse(txtID.Text); 
     m.FirstName = txtFname.Text; 
     m.LastName = txtLname.Text; 
     m.Mobile = txtMobile.Text; 
+0

为什么孩子需要了解母亲的创造?我认为你需要共享了很多代码 – jcolebrand

+0

我知道很多的代码来读取大部分未完成所有想做的事就是使该行的工作,其余的应该是相当简单的,我不知道我做了什么错了,是我的头脑跳到结论,所以它可能看起来集群f'd – user1778625

+4

太coooooooode。 – Yatrix

回答

0

给新孩子引用其父对象不是问题的原因。总之,你的状态:

“有值,不会在我label5.text显示”

这表明它要么是你的绑定有一个问题,你有没有实施INotifyPropertyChanged,或者你的UI更新机制不起作用(如果你不使用绑定)。正如你没有说明你用什么为UI,这是尽可能多的我可以帮助......

+0

label5.Text = m.GetMyChildrenDetails() – user1778625

+0

@ user1778625在您发布的代码中,您在调用addtoarray(m,ID,FNAME,LName,DOB)之前正在执行该行,您需要在*后称*。除非有更多的代码没有发布? – slugster

0

我的建议,你可以使用List而不是阵列,因为不是所有的母亲都有三个孩子。示例代码:

public static class Program 
{ 
    static void Main(string[] args) 
    { 
     Mother mother = new Mother { 
      FirstName = "M First", LastName = "M Last", Contact = "225632655" 
     }; 

     //Add dependents 
     mother.AddChild(new Child{ChildID = 1, FirstName = "Child FirstName 1", LastName = "Child LastName 1"}); 
     mother.AddChild(new Child{ChildID = 2, FirstName = "Child FirstName 2", LastName = "Child LastName 2"}); 
     mother.AddChild(new Child{ChildID = 3, FirstName = "Child FirstName 3", LastName = "Child LastName 3"}); 

     Console.WriteLine(mother); 
     //List all the mother dependents 
     foreach(Child c in mother.Children) 
     { 
      Console.WriteLine(c); 
     } 
     Console.ReadKey(); 
    } 
} 

class Mother 
{ 
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
    public string Contact {get; set;} 
    private List<Child> _child; 
    public Mother() 
    { 
     _child = new List<Child>(); 
    } 

    public void AddChild(Child child) 
    { 
     _child.Add(child); 
    } 

    public List<Child> Children 
    { 
     get { return _child; } 
    } 

    public override string ToString() 
    { 
     return string.Format("{0}, {1} ({2})", LastName, FirstName, Contact); 
    } 
} 

class Child 
{ 
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
    public int ChildID {get; set;} 

    public override string ToString() 
    { 
     return string.Format("{0} {1}, {2}", ChildID, LastName, FirstName); 
    } 
} 

我希望这会有所帮助。

+0

感谢您的建议,但我不得不使用数组,当我用我的代码所发生的一切是消息框(其中使用IAM作为测试方法萨伊添加,但因为我有这条线m.MyChildren [i] =新的儿童( m);数组正在不断重新创建,这意味着该行不能确定如何处理它,而且在我的标签中没有任何显示......我感到脑死亡 – user1778625

相关问题