[Mono-winforms-list] Creating an array of labels for use later - annoying problem, please help!

Jonathan Pobst monkey at jpobst.com
Tue Sep 15 22:07:30 EDT 2009


The following works, so I guess you need to work from it to see what the 
difference is:

private void Form1_Load(object sender, EventArgs e)
{
     int count = 5;

     Label[] periodlabel = new Label[count];

     for (int i = 0; i < count; i++)
     {
         periodlabel[i] = new Label();
         periodlabel[i].Text = string.Format("Hello {0}", i);
     }

     Console.WriteLine(periodlabel[0].Text);
}

Actually, scratch that, it looks like you are declaring periodlabel twice:

 > System.Windows.Forms.Label[] periodlabel = new
 > System.Windows.Forms.Label[10];
 >
 > then at the bottom
 >
 > private System.Windows.Forms.Label[] periodlabel;

Jonathan

Paul wrote:
> Hi,
> 
> Got a fun one here.
> 
> In the Designer file, I have defined my array of labels like this
> 
> System.Windows.Forms.Label[] periodlabel = new
> System.Windows.Forms.Label[10];
> 
> then at the bottom
> 
> private System.Windows.Forms.Label[] periodlabel;
> 
> The reason for this is that I want to be able to create on the between 1
> and 10 labels. The problem is this...
> 
> My source looks like this
> 
> public partial class lessonplan : Form
> {
>     public lessonplan(int noperiods)
>     {
> 	float periodSize = 100.0F / (float)noperiods;
> 	InitializeComponent();
> 	this.lesson.ColumnCount = noperiods + 1;
> 	this.lesson.ColumnStyles.Add(new
> System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute,
> 120F));
> 	for (int i = 0; i < noperiods; ++i)
> 	{
> 		this.lesson.ColumnStyles.Add(new
> System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent,
> periodSize));
> 		this.periodlabel[i].Location = new System.Drawing.Point(127 + (117 *
> i), 2);
>            	this.periodlabel[i].Text = "Lesson " + i.ToString();
> 		this.periodlabel[i].AutoSize = true;
> 		this.periodlabel[i].Font = new System.Drawing.Font("Arial", 18F,
> System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point,
> ((byte)(0)));
> 		this.periodlabel[i].Size = new System.Drawing.Size(109, 27);
> 		this.periodlabel[i].TabIndex = i + 6;
> this.lesson.Controls.Add(this.periodlabel[i], 0, i);
> 	}
> }
> 
> The source compiles fine (well, it tells me that Field
> 'timetabler.lessonplan.periodlabel is never assigned to, and will always
> have its default value null, but from what I've read, that's ok) , but
> when I run the application and click on the button which instantates the
> lessonplan class (it is passing a value happily, if I remove the
> periodlabel code, everything works find), I get 
> 
> System.NullReferenceException: Object reference not set to an instance
> of an object
> 
> I've tried a number of solutions to this (including putting a
> periodlabel[i] = new Label(); just before the addition of the
> periodlabel values but within the braces, trying to create dummy
> instances in the designer source file and a few other tricks found
> online - nothing worked).
> 
> Is there a nice, easy way of doing what I want here?
> 
> TTFN
> 
> Paul
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> Mono-winforms-list maillist  -  Mono-winforms-list at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-winforms-list



More information about the Mono-winforms-list mailing list