如果文本不适合单元格,请调整字体大小 (XRTable)

本文关键字:XRTable 字体 调整 不适合 文本 单元格 如果 | 更新日期: 2023-09-27 18:30:54

如果单元格内容不适合,如何调整其大小(字体大小)。我不想自动换行或更改单元格的大小,因为表单必须适合单个页面。文本可能具有不同的长度。它可能包含空格,但不必包含空格。

@edit

我犯了一个错误。我的意思是控制不是XtraGrid而是XRTable

如果文本不适合单元格,请调整字体大小 (XRTable)

我建议你先看看外观。有多种方法可以自定义单个行和单元格的外观。

如果这些选项没有帮助,则可以根据需要使用"自定义绘图"功能手动绘制单元格内容。例如,可以使用 GridView.CustomDrawCell 事件来检查单元格的内容是否超出单元格的边界,并相应地更新此单元格的字体。

相关示例:如何:根据单元格值自定义绘制单元格

您可以更改文本排列的单元格的字体,如下所示

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);          
        }
      }
    }

但是,当您不想使用自动换行时,如果文本溢出(您不知道文本可以有多长),则修剪文本会更好

 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;
        }           
      }
    }

这种解决方案的优点是,裁剪的内容只有被破坏,但在数据表中的文本保持其原始形式