C # TableLayoutPanel заменяет элемент управления?

#c#-4.0 #controls #replace #tablelayoutpanel

#c #-4.0 #элементы управления #заменить #tablelayoutpanel

Вопрос:

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

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

Ответ №1:

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

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

1. почему вы не можете перейти: TableLayoutPanel. Элементы управления. RemoveByKey(oldChild); TableLayoutPanel. Элементы управления. Добавить(newChild, y, x);

Ответ №2:

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

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