当前位置:编程学习 > C#/ASP.NET >>

未将对象引用设置到对象的实例。问题

namespace 学生信息显示升级版
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //设置这些静态变量是为了充当全局变量
        static int a = 0;
        static int b= 0;
        static int c = 0;
        static int i = 0;
        static int two = 0;
        static int tree=0;
        static int n=0;
       
        public class student//定义一个学生类
        {
            private string name;
            private string sex;
            private string banji;
            private string jiguan;
            public string Name
            {
                get
                {
                    return name;
                }
                set
                {
                    name = value;
                }
            }
            public string Sex
            {
                get
                {
                    return sex;
                }
                set
                {
                    sex = value;
                }
            }
            public string  Banji
            {
                get
                {
                    return banji;
                }
                set
                {
                    banji = value;
                }
            }
            public string Jiguan
            {
                get
                {
                    return jiguan;
                }
                set
                {
                    jiguan = value;
                }
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            label5.Text = "1班的学生人数是:"+textBox1.Text + "\n" + "2班的学生人数是:"+textBox2.Text + "\n" + "3班的学生人数是:"+textBox3.Text;
            a = int.Parse(textBox1.Text);
            b = int.Parse(textBox2.Text);
            c = int.Parse(textBox3.Text);
            two = a;
            tree = a+b;
        }
        
        private void button2_Click(object sender, EventArgs e)
        {
            
            if (xuanzhe.SelectedIndex != -1)
            {
                tabs.SelectedTab = tab2;
               
                if (xuanzhe.SelectedIndex == 0)
                {
                    label6.Text = "1班人数为:" + a;
                }
                else
                {
                    if (xuanzhe.SelectedIndex == 1)
                    {
                        label6.Text = "2班人数为:" + b;
                    }
                    else
                    {
                        label6.Text = "3班人数为:" + c;
                    }
                }
            }
            else
            {
                MessageBox.Show("请选择第几班进行输入!");
            }

        }

        private void label5_Click(object sender, EventArgs e)
        {
        }
        public student[] st = new student[200];//这里我就创建设一个数组的实例,只不过还没赋值
        private void button4_Click(object sender, EventArgs e)//这里就开始赋值
        {
            if (xuanzhe.SelectedIndex == 0)
            {
                if (i < a)
                {
                    student at1 = new student();
                    at1.Name = textBox4.Text;
                    at1.Sex = textBox5.Text;
                    at1.Jiguan = textBox6.Text;
                    at1.Banji = "计算机一班";
                    st[i++] = at1;
                    textBox4.Clear();
                    textBox5.Clear();
                    textBox6.Clear();
               ;
                    textBox4.Focus();
                }
                else
                {
                    MessageBox.Show("1班学生信息已全部输入完毕!");
                    textBox4.Clear();
                    textBox5.Clear();
                    textBox6.Clear();
                   
                    tabs.SelectedTab = tab1;
                    xuanzhe.Focus();
                    
                }
            }
            else
            {
                if (xuanzhe.SelectedIndex == 1)
                {
                    if (two <a+b)
                    {
                        student at1 = new student();
                        at1.Name = textBox4.Text;
                        at1.Sex = textBox5.Text;
                        at1.Jiguan = textBox6.Text;
                        at1.Banji = "计算机二班";
                        st[two++] = at1;
                        textBox4.Clear();
                        textBox5.Clear();
                        textBox6.Clear();
                        textBox4.Focus();

                    }
                    else
                    {
                        MessageBox.Show("2班学生信息已全部输入完毕!");
                        textBox4.Clear();
                        textBox5.Clear();
                        textBox6.Clear();
                        tabs.SelectedTab = tab1;
                        xuanzhe.Focus();
                    }
                }
                else
                {
                    if (xuanzhe.SelectedIndex == 2)
                    {
                        if (tree < a + b + c)//问题就在这里了,我一点录入信息就会显示索引超过数组界限
                        {
                            student at1 = new student();
                            at1.Name = textBox4.Text;
                            at1.Sex = textBox5.Text;
                            at1.Jiguan = textBox6.Text;
                            at1.Banji = "计算机三班";
                            st[tree++] = at1;
                            textBox4.Clear();
                            textBox5.Clear();
                            textBox6.Clear();
                            textBox4.Focus();
                        }
                        else
                        {
                            MessageBox.Show("3班学生信息已全部输入完毕!");
                            textBox4.Clear();
                            textBox5.Clear();
                            textBox6.Clear();
                           
                            tabs.SelectedTab = tab1;
                            xuanzhe.Focus();
                        }
                    }
                }
            }
            for (int i = 0; i < st.Length; i++)//因为数组的元素我设了200个,所以有些用不到,我这个是计算有用到的那些元素个数
            {
                if (st[i] != null)
                {
                    n += 1;
                }
            }
        }
        private void initializetvstudent()//这个是初始化树视图
        {
            TreeNode sts = new TreeNode("学生信息");
            TreeNode seconds1 = new TreeNode("计算机一班");
            for (int i = 0; i < a; i++)
            {
                seconds1.Nodes.Add(st[i].Name);
            }
            TreeNode seconds2 = new TreeNode("计算机二班" );
            for (int i = two; i < a + b; i++)
            {
                seconds2.Nodes.Add(st[i].Name);
            }
            TreeNode seconds3 = new TreeNode("计算机三班");
            for (int i = tree; i < a + b + c; i++)
            {
                seconds3.Nodes.Add(st[tree].Name);
            }
            sts.Nodes.AddRange(new TreeNode[] { seconds1, seconds2, seconds3 });
            tvstudent.Nodes.Add(sts);
        }
         --------------------编程问答-------------------- new student[200],只是创建了数组,对于数组中的每一项都有new一个student实例 --------------------编程问答-------------------- 因为字数限制,接上,
private void initializelvstudent()//这里是初视化列表视图
        {
            ColumnHeader column1 = new ColumnHeader();
            column1.Text = "姓名";
            lvstudent.Columns.Add(column1);
            ColumnHeader column2 = new ColumnHeader();
            column2.Text = "性别";
            lvstudent.Columns.Add(column2);
            ColumnHeader column3 = new ColumnHeader();
            column3.Text = "籍贯";
            lvstudent.Columns.Add(column3);
            ColumnHeader column4 = new ColumnHeader();
            column4.Text = "班级";
            lvstudent.Columns.Add(column4);
            for (int i = 0; i < n; i++)
            {
                ListViewItem lvi = new ListViewItem();
                lvi.SubItems.Add(st[i].Name);//未将对象引用设置到对象的实例。一到要显示树视图和列表视图的时候,就出现这个
                lvi.SubItems.Add(st[i].Sex);
                lvi.SubItems.Add(st[i].Jiguan);
                lvi.SubItems.Add(st[i].Banji);
                lvi.ImageIndex = i;
                lvstudent.Items.Add(lvi);
            }
           
        }
        private void tvstudentadd(int i)
        {
            ListViewItem lvi = new ListViewItem();
            lvi.SubItems.Add(st[i].Name);
            lvi.SubItems.Add(st[i].Sex);
            lvi.SubItems.Add(st[i].Jiguan);
            lvi.SubItems.Add(st[i].Banji);
            lvi.ImageIndex = i;
            lvstudent.Items.Add(lvi);
        }
       private void button5_Click(object sender, EventArgs e)
        {
            tabs.SelectedTab = tab1;    
        }

        private void tvstudent_AfterSelect(object sender, TreeViewEventArgs e)//这个是点树视图那个节点就会显示那个节点的内容
        {
                lvstudent.Items.Clear();
                if (e.Node.Text == "学生信息")
                {
                    for (int i = 0; i < n; i++)
                    {
                        tvstudentadd(i);
                    }
                }
                else
                    if (e.Node.Text == "计算机一班")
                    {
                        for (int i = 0; i < a; i++)
                        {
                            if (st[i].Banji == e.Node.Text)
                            {
                                tvstudentadd(i);
                            }
                        }
                    }
                    else
                        if (e.Node.Text == "计算机二班")
                        {
                            for (int i = two; i < a+b; i++)
                            {
                                if (st[i].Banji == e.Node.Text)
                                {
                                    tvstudentadd(i);
                                }
                            }
                        }
                        else
                            if (e.Node.Text == "计算机三班") 
                            {
                                for(int i=tree;i<a+b+c;i++)
                                {
                                    if(st[i].Banji ==e.Node .Text )
                                    {
                                        tvstudentadd(i);
                                    }
                                }
                            }
                           
        }

        private void button6_Click(object sender, EventArgs e)//这五个是列表视图内容的显示方式
        {
            lvstudent.View = View.LargeIcon;
        }

        private void button7_Click(object sender, EventArgs e)
        {
            lvstudent.View = View.SmallIcon;
        }

        private void button8_Click(object sender, EventArgs e)
        {
            lvstudent.View = View.Details;
        }

        private void button9_Click(object sender, EventArgs e)
        {
            lvstudent.View = View.List;
        }

        private void button10_Click(object sender, EventArgs e)
        {
            lvstudent.View = View.Tile;
        }
        private void button3_Click(object sender, EventArgs e)
        {
            tabs.SelectedTab = tab3;
            initializetvstudent();//初始化树视图
            initializelvstudent();//初始化列表视图
        }
我就不懂,为什么已经创建并赋值,它还会显示这个?要怎么解决? --------------------编程问答-------------------- 这是完整的代码,会不会是我哪里写错或写漏了 --------------------编程问答-------------------- http://blog.sina.com.cn/s/blog_8278b1800101aibx.html --------------------编程问答--------------------
引用 1 楼 bdmh 的回复:
new student[200],只是创建了数组,对于数组中的每一项都有new一个student实例


创建了数组,则内存就分配内存给了这个数组,这时候应该就只用赋值给这个数组就行了吧,student at1 = new student();
                    at1.Name = textBox4.Text;
                    at1.Sex = textBox5.Text;
                    at1.Jiguan = textBox6.Text;
                    at1.Banji = "计算机一班";
                    st[i++] = at1;
我这样就算赋值拉,难道数组中每一项要再创一个实例然后再赋? --------------------编程问答-------------------- 设断点看看哪个值是空的,分析这个值应该在哪里赋值,为什么没赋上 --------------------编程问答-------------------- 亲!!打个断点一看就知道了.......
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,