0

以下代码应生成 5 个相同的 groupbox 元素,每个元素填充一个表单、一个按钮和一个进度条:

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);
        }

    }

相反,我只正确填写了 1 个 Groupbox。其他4个是空的。

有没有人解决这个问题?

提前致谢

4

2 回答 2

1

控件实际上在分组框中,您只是看不到它们。你给了他们错误的位置。子控件位置相对于其父控件。使固定:

            tbxAttachmentLabel.Location = new Point(10, 20);

并在其他人中也解决此问题。

于 2011-03-31T20:22:17.763 回答
0

您也可以考虑重命名您的方法,因为它不会“绘制”控件,而是创建它们。

您也可以考虑使用初始化语法。它不仅更简洁,而且更好地显示了父/子关系。

更新

您也可以考虑使用锚点,以便控件可以与它们的父级一起调整大小。

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) },
                },
            }
            );
    }
}
于 2011-03-31T20:32:56.277 回答