我正在尝试用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
附加信息:未将对象引用设置为对象的实例。
我试着注释掉那一行,但无论我做什么,构造函数方法中都会出现相同的错误,只是在不同的行上。 我是编程新手所以欢迎任何帮助,提前谢谢:)
答案 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>();
请查看下面的内容,了解何时使用阵列与列表。