1

我有一个很快(我希望是基本的)问题。我正在为我公司的网站修改一些 C# 代码。该代码在固定列中为我绘制了一个表格,其数据是从数据库中提取的。表格每列的高度是固定的(当前),我需要更改它,因此如果字符串有一定长度并因此换行,则第二行文本是可见的(而不是被下一行隐藏) .

根据我的研究,似乎我可以使用 MeasureString(因为我知道字体和字符串)来查看字符串是否比我设置的表格列长/宽,如果是这样,则更改行的高度。但是,我对 C# 编程非常陌生(多年来总体上没有做过太多编程,除了 Web 的东西),所以我不确定如何实现所有这些。我有适当的逻辑,我知道如何改变高度,我只需要知道如何获得一个实际数字我可以使用逻辑来反对使用 MeasureString 方法(以及如何实例化我可能需要使用的任何变量和函数那个方法)。

4

3 回答 3

2

我相信您需要将此重载用于MeasureString(string,font,int)

width 参数指定返回的 SizeF 结构的宽度分量的最大值(Width)。如果 width 参数小于字符串的实际宽度,则返回的 Width 组件将被截断为一个值,该值表示将适合指定宽度的最大字符数。为了容纳整个字符串,返回的 Height 组件被调整为一个允许显示带有字符换行的字符串的值。

-- 从上面链接的 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;
于 2012-08-10T21:14:22.270 回答
1

您可以使用e.Graphics.MeasureString()TextRenderer.MeasureText()

它们各自的区别和优点如下所述:

TextRenderer.MeasureText 和 Graphics.MeasureString 大小不匹配

在那里您还可以找到使用示例,我将在此处跳过以避免重复。

于 2012-08-10T21:20:42.887 回答
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;
        }
    }
于 2012-08-10T21:21:13.823 回答