Почему у меня возникают проблемы с позиционированием при добавлении элементов управления во время выполнения? - PullRequest
0 голосов
/ 09 января 2012

У меня довольно странная проблема с пользовательским элементом управления C #. По сути, это панель, в которую вы можете добавлять ряды элементов управления нажатием кнопки.

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

    private void AddCommentControls()
    {
        _noOfComments++;

        ComboBox tempCbCategory = new ComboBox();
        TextBox tempTxtRoomNo = new TextBox();
        ComboBox tempPositive = new ComboBox();
        TextBox tempTxtComment = new TextBox();

        tempCbCategory.Name = "cbCategory" + _noOfComments.ToString();
        tempTxtRoomNo.Name = "txtRoomNo" + _noOfComments.ToString();
        tempPositive.Name = "cbPositive" + _noOfComments.ToString();
        tempTxtComment.Name = "txtComment" + _noOfComments.ToString();

        tempCbCategory.Location = controls["cbCategory" + (_noOfComments - 1).ToString()].Location;
        tempCbCategory.FormattingEnabled = true;
        tempCbCategory.Size = new Size(119, 21);
        tempCbCategory.Location = new Point(tempCbCategory.Location.X, (tempCbCategory.Location.Y + tempCbCategory.Height + 50));

        controls.Add("cbCategory" + _noOfComments.ToString(), tempCbCategory);

        pnlBg.Controls.Add(tempCbCategory);

        tempTxtRoomNo.Location = controls["txtRoomNo" + (_noOfComments - 1).ToString()].Location;
        tempTxtRoomNo.Size = new Size(68, 21);
        tempTxtRoomNo.Location = new Point(tempTxtRoomNo.Location.X, (tempTxtRoomNo.Location.Y + tempTxtRoomNo.Height + 50));
        controls.Add("txtRoomNo" + _noOfComments.ToString(), tempTxtRoomNo);

        pnlBg.Controls.Add(tempTxtRoomNo);

        tempPositive.Location = controls["cbPositive" + (_noOfComments - 1).ToString()].Location;
        tempPositive.Size = new Size(46, 21);
        tempPositive.FormattingEnabled = true;
        tempPositive.Items.AddRange(new object[] {"Yes", "No"});
        tempPositive.Text = "Yes";
        tempPositive.Location = new Point(tempPositive.Location.X, (tempPositive.Location.Y + tempPositive.Height + 50));

        controls.Add("cbPositive" + _noOfComments.ToString(), tempPositive);

        pnlBg.Controls.Add(tempPositive);

        tempTxtComment.Location = controls["txtComment" + (_noOfComments - 1).ToString()].Location;
        tempTxtComment.Size = new Size(437, 57);
        tempTxtComment.Location = new Point(tempTxtComment.Location.X, (tempTxtComment.Location.Y + tempTxtComment.Height + 50));
        tempTxtComment.Multiline = true;

        controls.Add("txtComment" + _noOfComments.ToString(), tempTxtComment);

        pnlBg.Controls.Add(tempTxtComment);
    }

Моя проблема возникает после добавления нескольких элементов управления, поля со списком (или текстовые поля, я не могу решить, какие именно), кажется, перемещаются вверх / вниз с постоянно увеличивающейся величиной с увеличением количества «строк», как показано здесь :

Example

Я прошел через это довольно много раз и, должно быть, упустил что-то явно очевидное, но мне нужно разобраться, чтобы я мог двигаться дальше!

Любая помощь будет принята с благодарностью.

С уважением, Даниэль.

РЕДАКТИРОВАТЬ: Если кто-то заинтересован, это был результат после реализации принятого ответа:

enter image description here

Ответы [ 2 ]

2 голосов
/ 09 января 2012
  1. Создайте пользовательский элемент управления строкой
  2. Используйте FlowLayoutPanel для размещения строк сверху вниз + у вас будут полосы прокрутки, если они будут переполнять основной контейнер.
0 голосов
/ 09 января 2012

положить tempCbCategory;tempTxtRoomNo;tempPositive;tempTxtComment в пользовательский контроль. или установите tempTxtRoomNo и tempTxtComment: AutoSize на False, прежде чем устанавливать их размер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...