如何使用C#中的MeasureString设置表格列宽?

如何使用C#中的MeasureString设置表格列宽?,c#,string,graphics,width,C#,String,Graphics,Width,我有一个很快的(我希望是基本的)问题。我正在修改公司网站的一些C代码。代码以固定列为单位为我绘制一个表,其数据从数据库中提取。表中每一列的高度是固定的(当前),我需要更改它,以便在字符串有一定长度时,可以看到第二行文本(而不是被下一行隐藏) 根据我的研究,似乎我可以使用MeasureString(因为我知道字体和字符串)来查看字符串是否比我的set table列长/宽,如果是这样,则更改行的高度。然而,我对C#编程非常陌生(除了web内容之外,多年来总体上没有做过太多编程),所以我不确定如何实现

我有一个很快的(我希望是基本的)问题。我正在修改公司网站的一些C代码。代码以固定列为单位为我绘制一个表,其数据从数据库中提取。表中每一列的高度是固定的(当前),我需要更改它,以便在字符串有一定长度时,可以看到第二行文本(而不是被下一行隐藏)


根据我的研究,似乎我可以使用MeasureString(因为我知道字体和字符串)来查看字符串是否比我的set table列长/宽,如果是这样,则更改行的高度。然而,我对C#编程非常陌生(除了web内容之外,多年来总体上没有做过太多编程),所以我不确定如何实现所有这些。我已经准备好了逻辑,我知道如何改变高度,我只需要知道如何得到一个实际的数字,我可以用逻辑来反对使用MeasureString方法(以及如何实例化我可能需要使用该方法的任何变量和函数)。

我相信你需要使用这个重载:

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

--从上面链接的MSDN页面(我的重点)


我相信您需要将此重载用于:

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

--从上面链接的MSDN页面(我的重点)


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

每种方法的区别和优点如下所述:


在这里您还可以找到使用示例,为了避免重复,我将跳过这些示例。

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

每种方法的区别和优点如下所述:


在这里,您还可以找到使用示例,为了避免重复,我将跳过这些示例。

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

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