未将对象引用设置到对象的实例。问题
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 --------------------编程问答--------------------
创建了数组,则内存就分配内存给了这个数组,这时候应该就只用赋值给这个数组就行了吧,student at1 = new student();
at1.Name = textBox4.Text;
at1.Sex = textBox5.Text;
at1.Jiguan = textBox6.Text;
at1.Banji = "计算机一班";
st[i++] = at1;
我这样就算赋值拉,难道数组中每一项要再创一个实例然后再赋? --------------------编程问答-------------------- 设断点看看哪个值是空的,分析这个值应该在哪里赋值,为什么没赋上 --------------------编程问答-------------------- 亲!!打个断点一看就知道了.......
补充:.NET技术 , C#