我无法显示保存在我创建的阵列中的数据

本文关键字:阵列 数据 创建 存在 显示 保存 | 更新日期: 2023-09-27 18:28:15

我是c#编码的初学者,我正在尝试创建一个为任何领域的学生保存nameidgroup的程序的示例。保存是可以的,但显示保存的内容是我的问题,它总是以给我一个处理错误结束。这是我的密码。非常感谢。

    public static string [] z, x, v,s;
    public static int i = 0;
    public Form1()
    {
        InitializeComponent();
        z = new string[3];
        x = new string[3];
        v = new string[3];

    }
    private void button1_Click(object sender, EventArgs e)
    {
        if(name.Text==string.Empty)
        {
            errorProvider1.SetError(name, "Enter Name");
            return;
        }
        if(id.Text==string.Empty)
        {
            errorProvider1.SetError(id, "Enter Student Id");
            return;
        }
        if(group.Text==string.Empty)
        {
            errorProvider1.SetError(group, "Enter Student Group");
        }
        z[i] = name.Text;
        x[i] = id.Text;
        v[i] = group.Text;
        i++;
        saved.Text = "Saved";
        saved.ForeColor = Color.Green;
        timer1.Start();
    }
    public void clear()
    {
        name.Text = id.Text = group.Text = " ";
    }
    private void timer1_Tick(object sender, EventArgs e)
    {
        saved.Text = " ";
        clear();
        timer1.Stop();
    }
    private void button2_Click(object sender, EventArgs e)
    {
        for (i = 0; i < 3;i++ )
        {
            screen.Text = "Name :" + z[i] + "'n ID: " + x[i] + "'nGroup : " + v[i];
        }
    }

我无法显示保存在我创建的阵列中的数据

正如您所说的

但显示保存的内容是我的问题

我可以假设问题就在这里(显示保存的东西的唯一方法):

private void button2_Click(object sender, EventArgs e)
{
    for (i = 0; i < 3;i++ )
    {
        screen.Text = "Name :" + z[i] + "'n ID: " + x[i] + "'nGroup : " + v[i];
    }
}

您在for循环中使用i和在类中声明的i来控制学生人数,尝试在按钮事件中使用另一个,如j

private void button2_Click(object sender, EventArgs e)
{
    for (j = 0; j < 3;j++ )
    {
        screen.Text = "Name :" + z[j] + "'n ID: " + x[j] + "'nGroup : " + v[j];
    }
}

如果不是问题的话,我不能在很多事情上思考,因为你没有指定你得到的是什么样的错误

首先点击button 1 3次,读取并保存数据。然后单击button 2以显示结果
此外,您应该使用screen.Text +=来附加以前的数据。

我认为这样修改代码可以解决问题

private void button2_Click(object sender, EventArgs e)
{
    for (int j = 0; j < 3; j++)
    {
        screen.Text = "Name :" + z[j] + "'n ID: " + x[j] + "'nGroup : " + v[j];
    }
}

这里所做的只是,在循环中定义了一个新的变量int j,而不是使用您定义的全局i变量(稍后您将了解到这是一个错误,但现在不是问题所在)。

我得到一个错误:

"索引超出了数组的界限"。

    for (i = 0; i < 3; i++)
    {
        screen.Text = "Name :" + z[i] + "'n ID: " + x[i] + "'nGroup : " + v[i];
    }

当i==3时终止。因此,当您单击按钮1时会导致越界错误。
此外,单击按钮1 4x也会导致此错误

访问数组中的项目时,请记住验证索引值

    if (i >= z.Length)
    {
        MessageBox.Show("Ran out of room in the array!");
    }

我没有足够的信息来直接回答这个问题(请参阅其他评论),但我可以根据上面看到的代码提出一些建议。

首先,使用对象。由于名称学生ID学员组似乎都是相关的,因此创建一个具有属性的对象:

public class Student
{
    public String Name { get; set; }
    public String Id { get; set; }
    public String Group { get; set; }
    public override String ToString()
    {
         // fill in
    }
}

使用要根据对象内容生成字符串的任何代码填充ToString。这使得学生负责格式化自己。

然后,您可以声明Student[3]的数组或List<学生>,后者将您带入集合,并允许您拥有任意数量的Student对象。

这将使您更深入地使用C#的面向对象特性。