Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When dynamically adding controls to a form only one will show

Tags:

c#

winforms

I am adding two controls dynamically during runtime, however only the control that is made first is displayed.

Here is the code:

Label tempLab = new Label();
tempLab.text = "Test Label";
MyControl.Controls.Add(tempLab);
tempLab.Location = new Point(5,5);

Button tempBut = newButton()
tempBut.text = "Test Button";
MyControl.Controls.Add(tempBut);
tempBut.Location = new Point(20,20);

Isn't copypasta so ignore syntax errors with caps. Any ideas ?

They are being added to a groupbox. I have tried adding them to a panel or just the form and the same issue occurs. I don't need event handlers, so please don't cite that requirement.

like image 793
JonE Avatar asked Feb 20 '13 21:02

JonE


People also ask

How do I add different controls to my form?

Add the control by drawingSelect the control by clicking on it. In your form, drag-select a region. The control will be placed to fit the size of the region you selected.

How do I add controls to a form in Visual Studio?

On the left side of the Visual Studio IDE, select the Toolbox tab. If you don't see it, select View > Toolbox from the menu bar or Ctrl+Alt+X. In the toolbox, expand Common Controls. Double-click PictureBox to add a PictureBox control to your form.

How do I add controls to my panel?

To create a group of controlsDrag a Panel control from the Windows Forms tab of the Toolbox onto a form. Add other controls to the panel, drawing each inside the panel.


3 Answers

I quickly tried your code pasting it in a windows form constructor. It runs ok, but the label is slightly overlapping the button because of its size. You may want to autosize it:

Label tempLab = new Label();
tempLab.Text = "Test Label";
tempLab.AutoSize = true;
Controls.Add(tempLab);
tempLab.Location = new Point(5,5);

Button tempBut = new Button();
tempBut.Text = "Test Button";
Controls.Add(tempBut);
tempBut.Location = new Point(20,20);

Oh, by the way. You mentioned you are using MyControl as a Panel or a GroupBox. Please ensure that you are also adding MyControl to your Controls collection.

like image 90
Larry Avatar answered Nov 01 '22 11:11

Larry


it appears that the location does not have a Size which becomes a flat line so to speak which is not visible.. this tempBut.Location = new Point(20,20); try changing to this

this.tempBut.Location = new System.Drawing.Point(20,20); 
this.tempBut.Size = new System.Drawing.Size(30, 15); 
like image 21
MethodMan Avatar answered Nov 01 '22 11:11

MethodMan


hope this helps. I am adding a array of MyTextBox into panel.

         Point prevlocation = new Point(0,0);
         foreach (object key in keys)  //List of Objects or which make new controls
         {


            MyTextBoxControlArray[i] = new MyTextBoxUserControl(key);   //User control but could be any control like textbox etc
            MyTextBoxControlArray[i].Width = this.panel1.Width - 50;
            MyTextBoxControlArray[i].AutoSize = true;
            MyTextBoxControlArray[i].InfoLoad += new MyTextBoxUserControl.InfoLoadEventHandler(Form1_InfoLoad);

            if (i == 0)
            {
                //first control
                prevlocation.Y += 3;
                prevlocation.X += 3;
                MyTextBoxControlArray[i].Location = prevlocation;
            }
            else
            {
            //adjsuting height and width
                MyTextBoxControlArray[i].Location = new System.Drawing.Point(
                             prevlocation.X,
                             prevlocation.Y + MyTextBoxControlArray[i].Height+3);
            }

            prevlocation = MyTextBoxControlArray[i].Location;

            i++;
        }

        this.panel1.Controls.AddRange(MyTextBoxControlArray); //in panel i can add a array of controls , but this could be done one by one
like image 1
aked Avatar answered Nov 01 '22 12:11

aked