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