2016-08-12 4 views
0

Я создаю приложение Windows Forms с большим количеством таблицLayoutPanels, меток и кнопок. При запуске и при изменении размеров форм я хотел бы, чтобы тексты в компонентах соответствовали компоненту наилучшим образом без резки концов слов.C# Изменить размер шрифта для соответствия контейнеру

Если кто-то может помочь с фрагментом кода или чем-то для этого, это действительно поможет мне!

Заранее спасибо.

+0

использовать свойство 'anchor', а затем опубликовать фрагмент кода. –

+0

Извините за недоразумение, но у меня нет фрагмента кода, я бы хотел, чтобы какой-то код изменял размер шрифта до приспосабливать уже измененные элементы управления наилучшим образом без резки концов. –

ответ

2

Как @ Ракитич говорит, что вам нужно убедиться, что все закреплено слева, сверху, снизу и справа.

В качестве иллюстрации я использовал однострочный текстовый блок размером, чтобы заполнить всю форму. Затем я поставил следующий код в случае SizeChanged:

private void textBox1_SizeChanged(object sender, EventArgs e) 
    { 
     TextBox tb = sender as TextBox; 
     if (tb.Height < 10) return; 
     if (tb == null) return; 
     if (tb.Text == "") return; 
     SizeF stringSize; 

     // create a graphics object for this form 
     using (Graphics gfx = this.CreateGraphics()) 
     { 
      // Get the size given the string and the font 
      stringSize = gfx.MeasureString(tb.Text, tb.Font); 
      //test how many rows 
      int rows = (int)((double)tb.Height/(stringSize.Height)); 
      if (rows == 0) 
       return; 
      double areaAvailable = rows * stringSize.Height * tb.Width; 
      double areaRequired = stringSize.Width * stringSize.Height * 1.1; 

      if (areaAvailable/areaRequired > 1.3) 
      { 
       while (areaAvailable/areaRequired > 1.3) 
       { 
        tb.Font = new Font(tb.Font.FontFamily, tb.Font.Size * 1.1F); 
        stringSize = gfx.MeasureString(tb.Text, tb.Font); 
        areaRequired = stringSize.Width * stringSize.Height * 1.1; 
       } 
      } 
      else 
      { 
       while (areaRequired * 1.3 > areaAvailable) 
       { 
        tb.Font = new Font(tb.Font.FontFamily, tb.Font.Size/1.1F); 
        stringSize = gfx.MeasureString(tb.Text, tb.Font); 
        areaRequired = stringSize.Width * stringSize.Height * 1.1; 
       } 
      } 
     } 
    } 

В вашем случае со многими объектами на форме, я бы просто выбрать один, и использовать его, чтобы установить свой собственный размер шрифта, подобный выше, а затем этот размер шрифта повторяется для всех объектов в форме. До тех пор, пока вы разрешаете подходящую «допустимую погрешность» (для обработки слов и т. Д., Вышеупомянутый метод должен помочь вам.

Кроме того, я настоятельно рекомендую установить минимальную ширину и высоту для вашей формы в форме SizeChanged событие, иначе могут быть глупые вещи!

 Смежные вопросы

  • Нет связанных вопросов^_^