2012-08-10 53 views
1

我有一个很快(我希望基本)的问题。我正在修改我公司网站的一些C#代码。代码在固定列中为我绘制一张表格,其数据从数据库中提取。表格每一列的高度是固定的(当前),我需要改变它,所以如果字符串是一定的长度,因此换行,第二行文本是可见的(而不是隐藏在下一行) 。如何在C#中使用MeasureString来设置表列宽度?

从我的研究中,似乎我可以使用MeasureString(因为我知道字体和字符串)来查看字符串是否比我设置的表列更长/更宽,并且如果是这样,更改行的高度。不过,我对C#编程非常陌生(除了网络工具外,几年来还没有完成很多编程),所以我不确定如何实现所有这些。我有逻辑,我知道如何改变高度,我只需要知道如何获得一个实际的数字我可以使用逻辑反对使用MeasureString方法(以及如何实例化我可能需要使用的任何变量和函数该方法)。

回答

2

我相信你需要使用这个过载MeasureString(string,font,int)

宽度参数指定宽度的组件返回的SizeF结构(宽度) 的最大值。如果宽度参数是 小于字符串的实际宽度,则返回的宽度组件 将被截断为表示最大字符数 的值,该值将在指定的宽度内。 若要容纳整个 字符串,返回的高度组件将被调整为 允许用字符换行显示字符串的值。

- 从上面链接MSDN页(重点煤矿)

// Measure string (you'll need to instansiate your own graphics object, 
// since you wont have PaintEventArgs) 
SizeF stringSize = new SizeF(); 
stringSize = e.Graphics.MeasureString(measureString, stringFont, stringWidth); 
int cellHeight = stringSize.Height; 
1

MSDN提供了一个例子,通过向控件的OnPaint方法注册事件处理程序(在实例化的控件中),或者通过重写OnPaint方法(在继承的控件中),或者通过覆盖您的OnPaint方法表单(不是最佳实践,因为您可能不希望为每个表单重新绘制)。 OnPaint方法将使您可以访问图形对象,以便您可以调用MeasureString方法。

考虑以下几点:

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      label1.Paint += new PaintEventHandler(label1_Paint); 
     } 

     void label1_Paint(object sender, PaintEventArgs e) 
     { 
      SizeF size = e.Graphics.MeasureString(label1.Text, label1.Font); 
      this.label1.Width = (int)size.Width; 
      this.label1.Height = (int)size.Height; 
     } 
    }