Вопрос:
Я хочу, чтобы размер шрифта Button изменялся динамически, когда я изменяю размер кнопки.
Пока я поместил кнопку в нужное место и изменил размер кнопки, когда я изменяю размер формы. Но когда кнопка становится маленькой для текста в Button, буквы просто “выпадают”.
Как изменить размер текста кнопок в зависимости от самого размера кнопки?
Ответ №1
Чтобы текст в ответной кнопке использовал следующий код:
//paint event from button: private void button1_Paint(object sender, PaintEventArgs e) { float fontSize = NewFontSize(e.Graphics, button1.Size, button1.Font, button1.Text); // set font with Font Class and the returned Size from NewFontSize(); Font f = new Font(«Arial», fontSize, FontStyle.Bold); button1.Font = f; } // method to calculate the size for the font: public static float NewFontSize(Graphics graphics, Size size, Font font, string str) { SizeF stringSize = graphics.MeasureString(str, font); float wRatio = size.Width / stringSize.Width; float hRatio = size.Height / stringSize.Height; float ratio = Math.Min(hRatio, wRatio); return font.Size * ratio; }
Пример кода в действии:
Как вы видите, шрифт будет изменяться по размеру внутри кнопки. И текст не будет выбрасываться из кнопки. Вы также можете использовать это для других Контроллеры также.
Ответ №2
Поскольку вы не указали детали в отношении шрифта, размера, а что нет, я сделаю общий фрагмент, чтобы указать вам в правильном направлении. Пожалуйста, измените его параметры в соответствии с вашими потребностями.
Button button = (Button)sender; button.Font = new System.Drawing.Font(«Microsoft Sans Serif», 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
Или даже что-то более простое
button.Font = new Font(«Microsoft Sans Serif», 10); Ответ №3
Вы хотите проверить, сколько высоты и ширины у вас есть для кнопки.
Затем закодируйте цикл на шрифте 1pt примерно на 200
в каждом вызове цикла TextRenderer.MeasureText(button.text, button.font); передается тот же шрифт, но с размером точки из цикла.
Затем убедитесь, что высота и ширина от MeasureText соответствуют ограничениям кнопок, которые вы предоставили себе. Если он подходит, попробуйте следующий более высокий размер. Если он не подходит, лучший размер шрифта, если предыдущий.
Ответ №4
Для динамического изменения я бы попробовал что-то вроде этого.
Но он только решает динамическое изменение. Для проверки ширины текста вам необходимо реализовать еще несколько функций для этого кода.
public class MyButton : Button { public MyButton() { } public override bool AutoSize { get { return false; } set { base.AutoSize = false; } } protected override void OnSizeChanged(EventArgs e) { base.OnSizeChanged(e); Font = new Font(this.Font.FontFamily,Height-10,this.Font.Style,GraphicsUnit.Pixel); } }