Удаление элемента управления из Windows Form и подгонка других элементов управления по размеру

#c# #winforms

#c# #winforms

Вопрос:

У меня есть приложение Windows Form, в которое я могу добавлять пользовательские элементы управления, нажимая кнопку. Я также могу удалять по одному элементу управления за раз, выбирая его и нажимая кнопку удаления. Все это работает нормально, но если я добавлю три элемента управления и удалю второй, между двумя оставшимися элементами управления в форме появится пробел. Я хотел бы, чтобы все остальные элементы управления переместились вверх, чтобы заполнить пробел.

Вот так:

// Добавьте три элемента управления, и у нас получится вот это:
Control1
Control2
Control3

// Удалите Control2, и теперь у нас есть это:
Control1

Control3

// Чего бы я хотел, так это этого:
Control1
Control3

Вот что я пробовал, но это не выполняет свою работу

 private void btQuestionDelete_Click(object sender, EventArgs e)
{
    bool adjustMode = false;
    int height = 0;

    foreach (Control c in this.tpQuestions.Controls)
    {
        if (c is QuestionControl)
        {
            if (adjustMode)
            {
                int moveUpBy = c.Top - height;
                c.Top = moveUpBy;
                c.Parent.Refresh();
            }
            else
            {
                QuestionControl q = (QuestionControl)c;
                if (q.IsSelected)
                {
                    this.tpQuestions.Controls.Remove(c);
                    adjustMode = true;
                    height = q.Height;
                }
            }
        }
    }
}
  

Комментарии:

1. может быть, вы хотите взглянуть на flowLayoutPanels?

2. Спасибо. Добавление и удаление элементов управления из FlowLayoutPanel значительно упрощает жизнь. Если вы разместите свой комментарий в качестве ответа, я соглашусь.

Ответ №1:

может быть, вы хотите взглянуть на flowLayoutPanels?

Ответ №2:

Чтобы добавить элемент управления, просто сделайте это:

 public void AddControl(ControlToAdd item)
{
    item.Dock = DockStyle.Top;

    this.Controls.Add(item);
}
  

Чтобы удалить элемент управления, просто Dispose это! Все остальные элементы управления будут скользить вверх!