首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

麻烦各位帮看几行list box的代码了,多谢, 初学者有关问题

2013-01-06 
麻烦各位帮看几行list box的代码了,谢谢, 菜鸟问题。本帖最后由 smrt_tony 于 2012-12-18 19:12:35 编辑我

麻烦各位帮看几行list box的代码了,谢谢, 菜鸟问题。
本帖最后由 smrt_tony 于 2012-12-18 19:12:35 编辑 我想实现的功能是,在三个txtbox里面输入的名字和成绩后,在listbox里面逐行显示出名字,同时加入array或arraylist。然后我用鼠标选中listbox里面的名字,被选中的名字要分别在下面的几个label里面显示出名字,成绩,和pass or fail

问题卡在了,红色字那部分。也看不出来自己的代码哪里的问题,本人学了1年java,这学期新的paper是C#。对他的syntax完全模糊。。。

另外,student的class里面为嘛要用ToString (这个部分的ToString是按照笔记里写的,这里为什么要这么用啊,记得java里面就是 public string getName(){return name};)
请各位帮看看了。。。谢谢啦!

代码如下

(using system就省了)
namespace ARRAY
{
    public partial class Form1 : Form
    {
        Student [] stu = new Student[10];
         public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            string a = textBox1.Text;
            string b = textBox2.Text.ToString();
            string c = textBox3.Text.ToString();

            int mk1 = Convert.ToInt32(textBox2.Text);
            int mk2 = Convert.ToInt32(textBox3.Text);

            //listBox1.Items.Add(a + " "+  b + " " + c);
            listBox1.Items.Add(a);

            Student s = new Student(a,mk1,mk2);
         }


        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            label4.Text = listBox1.SelectedItem.ToString();

            foreach(Student s in stu )
            {
                if (label4.Text == s.ToString())
                {
                    label5.Text = s.ShowMarks();

                    if(s.hasPassed()==true)
                    {
                        label6.Text = "PASS";


                    }
                    else if(s.hasPassed()==false)
                    {
                        label6.Text = "FAIL";
                    
                    }
                }
            }

        }
       }
}

student的代码如下

namespace ARRAY
{
    class Student
    {
        private string name;
        private int mark1;
        private int mark2;

        public Student(string aName, int MK1, int MK2)
        {
            name = aName;
            mark1 = MK1;
            mark2 = MK2;
        }
        (这个部分的ToString是按照笔记里写的,这里为什么要这么用啊,记得java里面就是 public string getName(){return name};)
        public override string ToString()
        {
            return name; 
        }

        public string ShowMarks()
        {
            return "(" + mark1 + "," + mark2 + ")";
        }

        public bool hasPassed()
        { 
            if((mark1+mark2)/2>=10)
                return true;
            else
                return false;
        }
    }
}
[解决办法]
1: Student [] stu = new Student[10];楼主如果不对这10个项赋值,那么这些项默认值为null,foreach的时候s.ToString()会报异常

2:处理办法
处理办法一:
a:楼主定义一个全局变量
static int index=0;
单击按钮时:
Student s = new Student(a,mk1,mk2);
stu[index]=s;
index++;


b:foreach()循环改为
for(int i =0;i<index;i++)
这样访问,因为后面可能还有null

处理办法二:建议采用这种办法Student [] stu = new Student[10];改为List<Student> stu=new List<Student>();
单击按钮时:
Student s = new Student(a,mk1,mk2);
stu.Add(s);
后面任然可以用foreach(),不会发生异常

热点排行