Hello Daniwebbers

I have a 2 dimentional control array which gets added to it programatically. There's a lot to add to it but i have already stumbled at the first hurdle.
I keep getting the standard "Object reference not set to an instance of an object." error when the first control is added.

Control array is initialised:

Control[ ][ ] TControls = new Control[6][];

Controls are added:

t = 1;

TControls[t][1] = new GroupBox();
TControls[t][1].Visible = false;
TControls[t][1].Parent = gbtasks;
TControls[t][1].Name = "t" + (t + 1).ToString();
TControls[t][1].ForeColor = Color.SeaGreen;
TControls[t][1].Text = (t + 1).ToString();
TControls[t][1].Size = new Size(262, 42);

if (t == 1)
    TControls[t][1].Location = new Point(3, 68);
    TControls[t][1].Location = new Point(3, 68 + (43 * (t - 1)));

TControls[t][1].MouseEnter += new EventHandler(TEnter);

thank you very much for your help

4 Years
Discussion Span
Last Post by nmaillet

You initializes one dimension of the 2D array. You need to initialize each element of that dimension, like so:

TControls[t] = new Control[size];

This is called a jagged array, since each element of the first dimension can have a different length. FYI, C# also has a convention for a rectangular array, like this:

Control[,] TControls = new Control[width, height];

In this case, you don't need to initialize like I mentioned above, since it is handled for you, but it all depends on whether or not your array needs to be jagged or not.


thankyou for the help mmailet

do you mean i need to initialise the first dimension of the array before adding controls to the second?

Pretty much, the first dimension of the array is a groupbox, and the second dimension of the array is all the controls contained within this group box.


Well kind of... A 2D array is an array of arrays. So the first dimension is an array of Control[]. That is, the first dimension doesn't hold a control, it holds an array Control[]. I hope that makes sense...

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.