Заполнить элемент управления набором меток
-
21-12-2019 - |
Вопрос
Я пишу программу, которая получает данные из реестра, а затем добавляет groupboxes в tabcontrol, и в groupbox я хотел бы создать столько элементов управления метками (для отображения информации реестра), сколько данных (пар ключ-значение) Я получил.Чтобы сделать это, я создал эту функцию:
private void AddAllControl()
{
GroupBox TestGroupBox = new GroupBox();
TestGroupBox.AutoSize = true;
TestGroupBox.Text = "valami";
TestGroupBox.Height = 500;
for (int i = 0; i < 21; i++)
{
Label TempLabel = new Label();
TempLabel.Text = i.ToString();
TempLabel.Location = new System.Drawing.Point(20 + i, 30);
TempLabel.Show();
TempLabel.Visible = true;
TempLabel.Enabled = true;
TestGroupBox.Controls.Add(TempLabel);
}
tabPage_SandBox.Controls.Add(TestGroupBox);
}
Эта функция обрабатывается при нажатии кнопки.После этого групповое поле отображается корректно, но вместо 21 метки появляется только 1 первая метка (с текстом = 0).Когда я останавливаюсь для отладки программы, я вижу, что все метки существуют и все свойства верны, однако они не отображаются.Должно быть, есть что-то, чего я не заметил.А теперь мой вопрос?Что я сделал не так?Как вы можете видеть, я попробовал и то, и другое visible
и enabled
собственность, но ни то, ни другое не приносит мне решения.
Решение
Вы должны установить
TempLabel.AutoSize = true;
И вы должны немного изменить местоположение, например
TempLabel.Location = new System.Drawing.Point(20 + 10 * i, 30);
или я думаю, вы хотите, чтобы метки располагались одна под другой, поэтому вам нужно установить местоположение следующим образом
TempLabel.Location = new System.Drawing.Point(20, 20+20 * i);
Другие советы
Если ваши метки имеют постоянный размер, то
TestGroupBox.Controls.Add(new Label()
{
Text = i.ToString(),
Location = new Point(20 + (i*20), 30),
Size = new Size(20, 20)
});
Это сделало бы свое дело