Following code should produce 5 identical groupbox elements filled with each a form, a button and a progress bar:
private void DrawControls()
{
for(int i=0; i<5; i++)
{
// define controls
GroupBox gbxAttachmentName = new GroupBox();
gbxAttachmentName.Text = "Datei.jpg";
gbxAttachmentName.Font = new Font(gbxAttachmentName.Font, FontStyle.Bold);
开发者_高级运维 TextBox tbxAttachmentLabel = new TextBox();
tbxAttachmentLabel.Text = "Bezeichnung";
tbxAttachmentLabel.Font = new Font(tbxAttachmentLabel.Font, FontStyle.Regular);
Button btnUploadAttachment = new Button();
btnUploadAttachment.Text = "übertragen";
btnUploadAttachment.Font = new Font(btnUploadAttachment.Font, FontStyle.Regular);
ProgressBar pbUploadProgress = new ProgressBar();
pbUploadProgress.Step = 1;
// position controls
gbxAttachmentName.Size = new Size(500, 75);
gbxAttachmentName.Location = new Point(10, 10 + (i * 85));
tbxAttachmentLabel.Size = new Size(375, 20);
tbxAttachmentLabel.Location = new Point(10, 20 + (i * 85));
btnUploadAttachment.Size = new Size(100, 22);
btnUploadAttachment.Location = new Point(390, 19 + (i * 85));
pbUploadProgress.Size = new Size(480, 20);
pbUploadProgress.Location = new Point(10, 45 + (i * 85));
// add controls to groupbox
gbxAttachmentName.Controls.Add(tbxAttachmentLabel);
gbxAttachmentName.Controls.Add(pbUploadProgress);
gbxAttachmentName.Controls.Add(btnUploadAttachment);
// add groupbox to form
flpMain.Controls.Add(gbxAttachmentName);
}
}
Instead, I only get 1 Groupbox correctly filled. The other 4 are empty ones.
Has anyone a solution for this?
Thanks in advance
The controls are actually in the groupboxes, you just can't see them. You gave them the wrong Location. Child control locations are relative to their parent. Fix:
tbxAttachmentLabel.Location = new Point(10, 20);
and fix this in the other ones as well.
You might also consider renaming your method as it does not "draw" controls, it creates them.
You might also consider using initializer syntax. Not only is it more concise, it shows the parent/child relationships better.
Updated
You might also consider using anchors so that the controls can resize along with their parent.
private static void CreateControls(Control parent)
{
int baseWidth = parent.ClientSize.Width - 20;
for (int i = 0; i < 5; i++)
{
parent.Controls.Add(
new GroupBox {
Text = "Datei.jpg",
Font = new Font(parent.Font, FontStyle.Bold),
Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right,
Size = new Size(baseWidth, 75),
MinimumSize = new Size(175, -1),
Location = new Point(10, 10 + (i * 85)),
Controls = {
new TextBox {
Text = "Bezeichnung",
Font = new Font(parent.Font, FontStyle.Regular),
Anchor = AnchorStyles.Left | AnchorStyles.Right,
Size = new Size(baseWidth - 100 - 30, 20),
Location = new Point(10, 20), },
new Button {
Text = "übertragen",
Font = new Font(parent.Font, FontStyle.Regular),
Anchor = AnchorStyles.Right,
Size = new Size(100, 22),
Location = new Point(baseWidth - 100 - 10, 19), },
new ProgressBar {
Step = 1,
Font = new Font(parent.Font, FontStyle.Regular),
Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right,
Size = new Size(baseWidth - 20, 20),
Location = new Point(10, 45) },
},
}
);
}
}
精彩评论