在C#中创建对象错误时创建TextBoxes数组

时间:2014-01-11 16:54:00

标签: c# arrays class object textbox

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

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

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

这是杜兹尼克班级:

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++;

        }
    }

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

未处理的类型' System.NullReferenceException'发生在Dugovi.exe

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

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

2 个答案:

答案 0 :(得分:3)

在这一行

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);

答案 1 :(得分:1)

您需要首先使用所需的大小初始化数组。抛出异常,因为你没有定义数组的大小。

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

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

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

请查看下面的内容,了解何时使用阵列与列表。

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