Как изменить размер метки по длине имени кнопки

#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 выполняет все эти действия. Спасибо за помощь, я изучаю программирование, это помогает мне понимать концепции.