2016-01-19 10 views
1

Как изменить размер содержимого ячейки (размер шрифта), если он не подходит. Я не хочу использовать размер слова или изменить размер ячейки, так как форма должна соответствовать одной странице. Текст может иметь разную длину. Он может содержать пробелы, но не обязательно.Изменить размер шрифта, если текст не помещается в ячейку (XRTable)

@edit

Я сделал ошибку. Контроль, который я имел в виду, - это не XtraGrid, а XRTable.

+2

Что вы уже пробовали? –

+0

Читая их документацию, не смог найти ничего полезного. Я могу рассчитать высоту и ширину текста вручную. Тем не менее, я спрашиваю, есть ли какой-то способ, предвиденный самим девекспрессом. – user2475983

+0

Я предполагаю, что вы используете Системное рисование где-нибудь? Если да, попробуйте использовать этот https://msdn.microsoft.com/en-us/library/6xe5hazb%28v=vs.110%29.aspx и зацикливать размеры шрифта, чтобы найти тот, который лучше всего подходит для вашей области? –

ответ

1

Предлагаю вам сначала взглянуть на Appearances. Существует несколько способов: customize appearances of individual rows and cells.

Если эти параметры не помогли, вы можете вручную нарисовать содержимое ячеек по мере необходимости, используя функцию Custom Drawing. Например, вы можете использовать событие GridView.CustomDrawCell, чтобы проверить, превышает ли содержимое ячейки пределы ячейки и соответствующим образом обновляет шрифт этой ячейки.

Связанные пример: How to: Custom Draw Cells Depending Upon Cell Values

0

Вы можете изменить шрифт ячейки, где текст протекает следующим образом

private void gvView_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) 
    { 
     if (e.Column != null && e.Column.Name == bgcStav.Name) 
     { 
     float minFontSize = 6; 
     string text = "teeeeeeeeeeeeeext"; 
     int minWidth = gvView.CalcColumnBestWidth(bgcStav);   
     SizeF s = e.Appearance.CalcTextSize(e.Graphics, text, minWidth); 
     if (s.Width >= minWidth) 
     { 
      e.Appearance.Font = new Font(e.Appearance.Font.FontFamily, minFontSize);   
     } 
     } 
    } 

, но это намного лучше, чтобы обрезать текст, если он прорывает (вы не знаете как долго текст может быть), если вы не хотите использовать WordWrap

private void gvView_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) 
    { 
     if (e.Column != null && e.Column.Name == bgcStav.Name) 
     { 
     string text = e.DisplayText; 
     string newText = ""; 
     int maxWidth = e.Bounds.Width - 20; 
     SizeF textSize =e.Graphics.MeasureString(text, e.Appearance.Font); 
     if (textSize.Width >= maxWidth) 
     { 
      string textPom = ""; 
      for (int i = 0; i < text.Length; i++) 
      { 
      textPom = text.Substring(0, i) + "..."; 
      textSize = e.Graphics.MeasureString(textPom, e.Appearance.Font); 
      if (textSize.Width >= maxWidth) 
      { 
       newText = text.Substring(0, i - 1) + "..."; 
       break; 
      } 
      } 
      e.DisplayText = newText; 
     }   
     } 
    } 

Преимущество этого решения заключается в том, что урожай только что displaied, но в datatable текст остается в его первоначальном виде

+0

Извините за поздний ответ, ваше решение будет работать на 'XtraGrid', но я ошибся в своем вопросе. См. Обновление. – user2475983