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

C# 如果文本不适合单元格,请调整字体大小(XRTable),c#,devexpress,devexpress-windows-ui,C#,Devexpress,Devexpress Windows Ui,如果不适合,如何调整单元格内容(字体大小)。我不想换行或更改单元格的大小,因为表单必须适合单个页面。文本可能有不同的长度。它可能包含空格,但不一定包含空格 @编辑 我犯了一个错误。我指的控件不是XtraGrid,而是XRTable我建议您先看看。有多种方法可以解决这个问题 如果这些选项没有帮助,可以根据需要使用功能手动绘制单元格内容。例如,您可以使用事件检查单元格的内容是否超出单元格的边界,并相应地更新此单元格的字体 相关示例:您可以按如下方式更改文本所在单元格的字体 private void

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

@编辑


我犯了一个错误。我指的控件不是
XtraGrid
,而是
XRTable

我建议您先看看。有多种方法可以解决这个问题

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


相关示例:

您可以按如下方式更改文本所在单元格的字体

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;
        }           
      }
    }
private void gvView\u CustomDrawCell(对象发送者,DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
{
if(e.Column!=null&&e.Column.Name==bgcStav.Name)
{
字符串文本=e.DisplayText;
字符串newText=“”;
int maxWidth=e.Bounds.Width-20;
SizeF textSize=e.Graphics.MeasureString(text,e.earance.Font);
如果(textSize.Width>=maxWidth)
{
字符串textPom=“”;
for(int i=0;i=maxWidth)
{
newText=text.Substring(0,i-1)+“…”;
打破
}
}
e、 DisplayText=newText;
}           
}
}

此解决方案的优点是,裁剪只显示所显示的内容,但数据表中的文本仍保持其原始形式

您已经尝试了什么?阅读他们的文档,无法真正找到任何有用的内容。我可能可以手工计算文本的高度和宽度。然而,我想问的是,devexpress本身是否有某种方式可以预见。我假设您正在某处使用系统绘图?如果是这样,请尝试使用此选项并循环使用字体大小,以找到最适合您所在区域的字体。您找到解决方案了吗?@Majkl您的解决方案可能有效,我还没有时间检查它,我会在检查后立即进行更新。很抱歉,您的解决方案会在
XtraGrid
上运行,但我的问题中犯了错误。请查看更新。