C#创建字段数组

C#创建字段数组,c#,field,C#,Field,嘿! 我想创建一个字段数组。但是,我的代码返回以下错误:“WindowsFormsApplication1.Form1.fieldArray”字段从未分配给,其默认值始终为null 对我如何解决这个错误有什么建议吗 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using

嘿! 我想创建一个字段数组。但是,我的代码返回以下错误:“WindowsFormsApplication1.Form1.fieldArray”字段从未分配给,其默认值始终为null

对我如何解决这个错误有什么建议吗

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private Field[] fieldArray;
        private Field f; 
        public Form1()
        {
            InitializeComponent();
        }

        private void populateTree(string path, TreeNode tv1)
        {
            string[] dir = Directory.GetDirectories(path);
            foreach (string d in dir)
            {
                string entry = Path.GetFileName(d);
                TreeNode t = tv1.Nodes.Add("Folder", entry, 0);
                populateTree(d, t);
            }
            string[] files = Directory.GetFiles(path);
            foreach (string f in files)
            {
                string entry = Path.GetFileName(f);
                tv1.Nodes.Add(f, entry, 1);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //populate the tree
            TreeNode t = treeView1.Nodes.Add("Units");
            populateTree(@"..\units\", t);

            f = new Field();

            for (int i = 0; i < 10; i++)
            {
                fieldArray[i] = new Field();
            }

            fieldArray[1].label.AutoSize = true;
            fieldArray[1].label.Location = new System.Drawing.Point(323, 9);
            fieldArray[1].label.Name = "Programtittle";
            fieldArray[1].label.Text = "UAI UnitDef Editor";
            this.Controls.Add(fieldArray[1].label);

            int clabel = 36;
            //fieldArray[1].varName = new string[] { "unitName", "name", "description" }; //define labels

            //popluate label
            for (int i = 1; i < fieldArray[i].varName.Length; i++)
            {
                fieldArray[i].label = new Label();
                fieldArray[i].label.AutoSize = true;
                fieldArray[i].label.Location = new System.Drawing.Point(323, clabel);
                fieldArray[i].label.Name = "label";
                this.Controls.Add(fieldArray[i].label);
                fieldArray[i].label.Text = fieldArray[i].varName[i];
                clabel = clabel + 26;
            }

            //populate textbox 
            int cbox = 33;
            for (int i = 0; i < fieldArray[i].varName.Length; i++) 
            {

                fieldArray[i].txtBox = new TextBox();
                fieldArray[i].txtBox.Location = new System.Drawing.Point(380, cbox);
                fieldArray[i].txtBox.Name = "txtBox";
                fieldArray[i].txtBox.Size = new System.Drawing.Size(100, 50);
                this.Controls.Add(fieldArray[i].txtBox);

                cbox = cbox + 26;
            }
        }

        private void populateLabelTxtBox(string path)
        {
            //f.txtBox.Multiline = true; //added for testing purpose; 

            //read,split file 
            string text = System.IO.File.ReadAllText(path);

            char[] delimiters = new char[] { '{', '=', ';', '}' };
            string[] parts = text.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);

            for (int i = 0; i < parts.Length; i++)
            {
                fieldArray[i].txtBox.Text = parts[i];
            }
        }

        private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (treeView1.SelectedNode.Name != "Folder")
            {
                string text = System.IO.File.ReadAllText(treeView1.SelectedNode.Name);
                //f.txtBox.Text = text;
                populateLabelTxtBox(treeView1.SelectedNode.Name);
            }
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
使用System.IO;
命名空间Windows窗体应用程序1
{
公共部分类Form1:Form
{
专用字段[]字段数组;
私人领域f;
公共表格1()
{
初始化组件();
}
私有void populateTree(字符串路径,树节点tv1)
{
string[]dir=Directory.GetDirectories(路径);
foreach(dir中的字符串d)
{
string entry=Path.GetFileName(d);
TreeNode t=tv1.Nodes.Add(“文件夹”,条目,0);
种群树(d,t);
}
string[]files=目录.GetFiles(路径);
foreach(文件中的字符串f)
{
string entry=Path.GetFileName(f);
tv1.Nodes.Add(f,entry,1);
}
}
私有void Form1\u加载(对象发送方、事件参数e)
{
//填充树
TreeNode t=treeView1.Nodes.Add(“单位”);
人口树(@“.\units\”,t);
f=新字段();
对于(int i=0;i<10;i++)
{
fieldArray[i]=新字段();
}
fieldArray[1]。label.AutoSize=true;
fieldArray[1]。label.Location=新系统。绘图。点(323,9);
fieldArray[1]。label.Name=“ProgramTitle”;
fieldArray[1]。label.Text=“UAI UnitDef编辑器”;
this.Controls.Add(fieldArray[1].label);
int-clabel=36;
//fieldArray[1]。varName=新字符串[]{“unitName”、“name”、“description”};//定义标签
//聚磷酸盐标签
对于(int i=1;i
您从未初始化fieldArray

//Change
private Field[] fieldArray;


您从未初始化过
fieldArray
。类似于
fieldArray=newfield[10]应该执行此操作。

在尝试访问fieldArray中的元素之前,必须按如下方式初始化数组:

fieldArray = new Field[/*size of the array*/];

但是,要小心创建一个足够大的数组来存储所有字段。假设您创建了一个包含5个元素的Field[5]数组,并尝试为fieldArray[5]赋值,则会出现边界外异常。

在声明数组时初始化数组:

private Field[] fieldArray = new Field[100]; // size == 100

在执行初始化数组的每个元素的循环之前,需要初始化数组本身:

fieldArray = new Field[10]; // Create this with the appropriate size
for (int i = 0; i < 10; i++)
{
    fieldArray[i] = new Field();
}
fieldArray=新字段[10];//用合适的大小创建这个
对于(int i=0;i<10;i++)
{
fieldArray[i]=新字段();
}

另一方面,您从未实际设置过
fieldArray[0]
-我怀疑您的代码明确设置了
fieldArray[1]。XXX
应该在元素0上工作。

列表可能比数组容易,但是:您正在将项分配给空数组;知道所需号码后,首先创建阵列:

fieldArray = new Field[10];       
for (int i = 0; i < 10; i++)
{...}
fieldArray=新字段[10];      
对于(int i=0;i<10;i++)
{...}
然而,就个人而言,我会使用一个列表:

private readonly List<Field> fields = new List<Field>();
...
fields.Add(someField);
private readonly List fields=new List();
...
字段。添加(someField);

我没有看到分配数组的任何行:like

int number_of_elements = 100;
fieldArray = new Field[number_of_elements];
如果字段的数量是动态的,我会使用ArrayList,比如

列表字段数组=新列表()

然后向其中添加元素:

fieldArray.Add(...)

必须初始化数组

fieldArray = new Field[10];
上面的代码使您认为数组已经初始化,但实际上它还没有初始化。要为阵列分配一些内存,需要有如下内容

fieldArray = new Field[/*length or size*/];

嘿我试了你的建议!但在fieldArray[0]处。label=new label();it retu
fieldArray[i] = new Field();
fieldArray = new Field[/*length or size*/];