Странное поведение с динамической формой в VS2010 - PullRequest
0 голосов
/ 01 апреля 2011

Следующий код должен создать 5 идентичных элементов группового блока, заполненных каждым формой, кнопкой и индикатором выполнения:

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 групповую коробку. Остальные 4 пустые.

У кого-нибудь есть решение для этого?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

Элементы управления на самом деле находятся в групповых окнах, вы просто не можете их видеть.Вы дали им неправильное местоположение.Расположение дочерних элементов управления относительно их родителя.Исправьте:

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

и исправьте это и в других.

0 голосов
/ 01 апреля 2011

Вы можете также рассмотреть возможность переименования вашего метода, поскольку он не «рисует» элементы управления, он создает их.

Вы также можете рассмотреть возможность использования синтаксиса инициализатора. Он не только более лаконичен, но и лучше показывает отношения между родителями и детьми.

Обновлено

Вы можете также рассмотреть возможность использования якорей, чтобы элементы управления могли изменять размер вместе со своим родителем.

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) },
                },
            }
            );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...