如何使用MeasureString在C#中设置表格列宽?(How to use MeasureStr

2019-07-30 21:38发布

我有一个相当快(我希望基本的)问题。 我修改为我公司的网站上的一些C#代码。 该代码绘制一个表格,我在固定列,其数据是从数据库中抽取。 该表的每一列的高度是固定的(目前),以及我需要改变它,以便如果字符串是一定的长度,并因此包,文字的第二线是可见的(而不是隐藏由下一行) 。

从我的研究,这似乎是我可以使用MeasureString(因为我知道字体和字符串),看看如果字符串长/比我的一套表列宽,更改行的高度,如果是这样的话。 不过,我很新的C#编程(和已经很多年没有整体做了很多节目,除了网页内容),所以我不知道如何让这一切实现。 我有到位的逻辑,我知道如何改变高度,我只需要知道如何获得一个实际的数字我可以用逻辑对使用MeasureString方法(以及如何实例,我可能需要使用任何变量和函数该方法)。

Answer 1:

我相信你需要使用这个过载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;


Answer 2:

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

他们每个人的差异与优势是形容这里:

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

在那里,你也可以找到用法示例,我将跳过这里以避免重复。



Answer 3:

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


文章来源: How to use MeasureString in C# to set table column width?