【问题标题】:How to use MeasureString in C# to set table column width?如何在 C# 中使用 MeasureString 设置表格列宽?
【发布时间】:2012-08-08 04:41:55
【问题描述】:

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

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

【问题讨论】:

    标签: c# string graphics width


    【解决方案1】:

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

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

    -- 从上面链接的 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;
    

    【讨论】:

      【解决方案2】:

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

      这里描述了它们各自的区别和优点:

      TextRenderer.MeasureText and Graphics.MeasureString mismatch in size

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

      【讨论】:

        【解决方案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;
                }
            }
        

        【讨论】:

          猜你喜欢
          • 2023-04-07
          • 1970-01-01
          • 2010-10-30
          • 2012-08-17
          • 2015-10-02
          • 1970-01-01
          • 2022-01-25
          • 2012-08-13
          • 1970-01-01
          相关资源
          最近更新 更多