C # TableLayoutPanel заменить контроль? - PullRequest
2 голосов
/ 30 мая 2011

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

В принципе, если бы я мог просто удалить элемент управления и вставить другой в его индекс, это бы сработало для меня. Однако я не вижу такой опции, как «сращивание» или «вставка» в коллекции Controls TableLayoutPanel, и мне было интересно, существует ли простой способ вставить элемент управления по определенному индексу. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 07 февраля 2012

Исправлено, заполнив панель двумя элементами управления, которые я хотел поменять, и поместив это в TableLayoutPanel.Затем я установил их видимость, в соответствии с которой я хотел видеть в какое время.

0 голосов
/ 16 декабря 2014

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

    // Replaces a drop down menu with a label of the same value
    private void lockDropMenu(ComboBox dropControl)
    {
        TableLayoutPanelCellPosition pos = myTable.GetCellPosition(dropControl);
        Label lblValue = new Label();
        myTable.Controls.Remove(dropControl);
        if (dropControl.SelectedItem != null)
        {
            lblValue.Text = dropControl.SelectedItem.ToString();
            lblValue.Font = lblValue.Font = dropControl.Font;
            // Just my preferred formatting
            lblValue.AutoSize = true;
            lblValue.Dock = System.Windows.Forms.DockStyle.Fill;
            lblValue.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;

            myTable.Controls.Add(lblValue, pos.Column, pos.Row);
        }
    }
...