【问题标题】:Creating an array of TextBoxes while creating a object error in C#在 C# 中创建对象错误时创建文本框数组
【发布时间】:2014-01-11 16:54:00
【问题描述】:

我正在尝试用 C# 编写一个小程序,只是为了练习,但我遇到了一个我无法在任何地方找到解决方案的问题。

程序有 2 个文本框(Ime1 和 Dug1)和一个按钮,所以当我按下按钮时,它会创建一个对象(duznik1),如下所示:

 Duznik duznik1 = new Duznik(Ime1.Text, int.Parse(Dug1.Text));

这是 Duznik 类:

public class Duznik
    {
        public int count = 0;
        public string ime;
        public int dug;
        TextBox[] Imena;
        TextBox[] Dugovi;
        TextBox[] Vraceno;
        TextBox[] Dodato;


        public Duznik(string imeDuznika, int kolikoDuguje)
        {
            ime = imeDuznika;
            dug = kolikoDuguje;


            Imena[count] = new TextBox();
            Imena[count].Text = imeDuznika;

            Dugovi[count] = new TextBox();
            Dugovi[count].Text = dug.ToString();

            Vraceno[count] = new TextBox();
            Dodato[count] = new TextBox();

            count++;

        }
    }

所以基本上,我想要它做的是创建文本框数组(Imena,Dugovi,Vraceno,Dodato),并用文本框填充这些数组(我尝试在构造函数方法中创建),但无论我做什么,我总是在“Imena[count].Text = imeDuznika;”这一行出现错误,并且错误提示:

在 Dugovi.exe 中发生了“System.NullReferenceException”类型的未处理异常

附加信息:对象引用未设置为对象的实例。

我试图注释掉该行,但无论我做什么,构造方法中都会出现相同的错误,只是在不同的行上。 我是编程新手,所以欢迎任何帮助,在此先感谢:)

【问题讨论】:

    标签: c# arrays class object textbox


    【解决方案1】:

    在这一行

    Imena[count] = new TextBox();
    

    您尝试将数组的索引 0 设置为 TextBox 的一个实例,但您没有在任何地方定义数组的大小。所以这基本上只是一个变量,它指向内存中的任何内容,并且试图在该变量的偏移量零处设置一些东西会触发 NullReferenceException。就像写作一样

    null[0] = new TextBox();
    

    您需要在数组的某个位置定义包含已定义数量的文本框

    // An array to hold 10 textboxes
    TextBox[] Imena = new TextBox[10];
    

    请注意,在此之后,数组可以包含 10 个文本框,但它仍然是空的,您需要将文本框分配给正确的偏移量。

    使用数组有许多不切实际的缺点。最重要的是您需要知道最大维度,如果达到该限制,您需要为新的最大维度重新分配所有内容。最好使用更灵活的集合对象

    List<TextBox> Imena = new List<TextBox>();
    
    Imena.Add(new TextBox);
    

    这里你不需要定义最大限制,如果你的用户需要少量的 TextBox,你也不会浪费内存

    作为旁注。创建 TextBox 不足以显示它们。您需要将它们添加到控件容器(通常是表单,也可以是 GroupBox 或 Panel)并设置相对于容器坐标的位置

    TextBox t1 = new List<TextBox>();
    t1.Location = new Point(10,10);
    formContainerInstance.Controls.Add(t1);
    

    【讨论】:

    • 谢谢,这就像一个魅力:) 现在没有错误,但我创建的文本框似乎没有出现在任何地方。那是因为我需要指定它的位置还是出于其他一些原因?
    • 您需要至少指定位置(如果需要,还需要指定大小),但最重要的是。您需要将 TextBox 添加到在视频上托管它们的 Form 的 Controls 集合中
    【解决方案2】:

    你需要先用你想要的大小初始化数组。它抛出异常是因为您没有定义数组的大小。

    TextBox[] Imena = new TextBox[4]();
    

    其他选项是使用列表代替,这样您就不必定义大小。

    List<TextBox> Imena = new List<TextBox>();
    

    查看下方以了解何时使用数组与列表。

    Array versus List<T>: When to use which?

    【讨论】:

      猜你喜欢
      • 2021-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多