#c# #winforms
#c# #winforms
Вопрос:
Я динамически добавляю элементы управления к элементу управления FlowLayoutPanel. Элементы управления, которые я добавляю в flowlayoutpanel, представляют собой панели, содержащие два элемента управления: метку разного размера и поле со списком фиксированного размера.
Проблема в том, что метка и поле со списком отображаются горизонтально на содержащей их панели (ну, я думаю). Поля со списком обрезаны и едва видны. Я попытался установить для свойства Autosize каждой панели значение true, но это не помогает.
Есть ли способ расположить элементы управления на панели сверху вниз (сложить их)? Может ли проблема быть в flowlayoutpanel?
Спасибо за помощь!
private void PopulateQuestionFlowPanel()
{
foreach (var question in _viewModel.Questions)
{
//build question label
var questionLabel = new Label();
questionLabel.Text = question.Text;
questionLabel.Tag = question.Id;
//build answer combobox
var answerCombo = CreateQuestionComboBox(question);
//put question and answer into panel
var controlPanel = new Panel();
controlPanel.Tag = question.Id;
controlPanel.AutoSize = true;
controlPanel.Controls.Add(questionLabel);
controlPanel.Controls.Add(answerCombo);
//add panels to flowpanel
questionPanel.Controls.Add(controlPanel);
}
}
Комментарии:
1. Панель управления не обеспечивает автоматическую компоновку. Задайте свойства местоположения и размера метки и комбинации. Или используйте пользовательский элемент управления. Или сначала выполните эту работу в конструкторе и посмотрите на сгенерированный дизайнером код, чтобы сделать это правильно.
2. Спасибо.. Я думаю, что usercontrol — хорошая идея
3. @HansPassant Решение для пользовательского управления отлично сработало. Если вы добавите ответ, я бы выбрал его.
4. @Nick: можете ли вы поделиться кодами и как вы создали пользовательский элемент управления
Ответ №1:
Может быть, лучше использовать TableLayoutPanel и удалить все столбцы, чем вы могли бы это сделать :
int i = 0;
foreach (var question in _viewModel.Questions)
{
//build question label
var questionLabel = new Label();
questionLabel.Text = question.Text;
questionLabel.Tag = question.Id;
//build answer combobox
var answerCombo = CreateQuestionComboBox(question);
//put question and answer into panel
var controlPanel = new Panel();
controlPanel.Tag = question.Id;
controlPanel.AutoSize = true;
controlPanel.Controls.Add(questionLabel);
controlPanel.Controls.Add(answerCombo);
//add panels to flowpanel
tableLayoutPanel1.SetRow(controlPanel, i);
tableLayoutPanel1.RowCount = i ;
}