#c# #winforms #label #size
#c# #winforms #метка #размер
Вопрос:
Я пытаюсь создавать кнопки и метки динамически, создание выполняется нормально, но изменение размера метки является проблемой, я хочу увеличить размер метки по длине названия кнопки, но изменение размера не работает, мой код и снимок экрана вывода приведены ниже, вы можете мне помочь, пожалуйста?
for (int i = 0; i < 10; i )
{
Button btn = new Button();
btn.Name = "btnAdi" (i 1).ToString();
btn.Text = (i 1).ToString();
this.Controls.Add(btn);
btn.Location = new Point(0, btn.Height * i);
Label lbl = new Label()
{
TextAlign = ContentAlignment.MiddleLeft,
Dock = DockStyle.None,
BorderStyle = BorderStyle.FixedSingle,
};
lbl.Text = btn.Name.ToString();
lbl.Size = new Size( (btn.Name.Length), btn.Height);
this.Controls.Add(lbl);
lbl.Location = new Point(btn.Width, (btn.Height * i));
}
Комментарии:
1. Это не работает, так как размер, который вы задаете, слишком мал. размер указан в пикселях, а не в «ширине пространства символов».
2. @Malior есть ли способ преобразовать его в пиксель? (это ответ, который я ожидаю)
3. Возможно, вы захотите узнать о
TableLayoutPanel
.
Ответ №1:
Вам просто нужно автоматически изменить размер метки, что-то вроде этого:
Редактировать:
Следуя комментарию @Malior, с помощью автоматического изменения размера вы можете удалить строку «lbl.Size».
for (int i = 0; i < 10; i )
{
Button btn = new Button();
btn.Name = "btnAdi" (i 1).ToString();
btn.Text = (i 1).ToString();
this.Controls.Add(btn);
btn.Location = new Point(0, btn.Height * i);
Label lbl = new Label()
{
TextAlign = ContentAlignment.MiddleLeft,
Dock = DockStyle.None,
BorderStyle = BorderStyle.FixedSingle,
};
lbl.AutoSize = true;
lbl.Text = btn.Name.ToString();
this.Controls.Add(lbl);
lbl.Location = new Point(btn.Width, (btn.Height * i));
}
Вывод:
ПРАВКА2:
Если вы хотите использовать свойство «lbl.Size», вам нужно что-то вроде этого, чтобы получить ширину lbl.Текст:
Font arialBold = new Font("Arial", 10);
Size size = TextRenderer.MeasureText(lbl.Text, arialBold);
lbl.Size = new Size(size.Width, size.Height);
Я отметил, что этот метод также дает на 1 или 2 пробела больше, чем предполагалось.
Вывод2:
Комментарии:
1. В этом случае, я думаю, вы можете не указывать lvl. Размер = назначение.
2. Я только что понял, что это не решает актуальную проблему, моя проблема в том, почему lbl.size не сработал?, теперь размер метки масштабируется свойством AutoSize, а не свойством Size, поэтому проблема все еще существует в моем случае.
3. Думаю, я понял проблему, я собираюсь отредактировать ее с помощью нового решения. кстати, я думаю, что автоматический размер был лучшим способом следовать.
4. @Mikev Спасибо за ответ, поэтому мне нужен текст, название шрифта и размер шрифта, чтобы преобразовать его в пиксель, тогда свойство Size будет работать. Но вы говорите, что свойство AutoSize выполняет все эти действия. Спасибо за помощь, я изучаю программирование, это помогает мне понимать концепции.