【问题标题】:Determining the Position of a String After it is Drawn using WinForms (C#)在使用 WinForms (C#) 绘制字符串后确定字符串的位置
【发布时间】:2009-05-22 07:01:02
【问题描述】:

我正在一个大边界框上绘制一个字符串,并使用 StringFormat 适当地对齐字符串。但是,一旦绘制字符串,我需要字符串的实际 (X, Y) 位置(不仅仅是 MeasureString 给出的大小)。

我正在使用下面的代码:

CharacterRange[] ranges = { new CharacterRange(0, this.Text.Length) };
format.SetMeasurableCharacterRanges(ranges);

//Measure character range
Region[] region = g.MeasureCharacterRanges(this.Text, this.Font, layoutRect, format);
RectangleF boundsF = region[0].GetBounds(g);
bounds = new Rectangle((int)boundsF.Left, (int)boundsF.Top,
                       (int)boundsF.Width, (int)boundsF.Height);

这是一个代码段,因此请忽略任何缺少的声明。关键是上面代码给出的矩形大小不合适,字符串的最后一个字符被删除,只绘制了字符串的第一行。

有人知道为什么,或者有更好的方法吗?

谢谢

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    确保您使用正确的格式来衡量您的文本。你还没有包含完整的源代码,所以我不知道你是不是。

    您可以使用两种“标准”格式值: StringFormat.GenericTypographicStringFormat.GenericDefault。如果没有记忆,默认选择的通常是GenericDefault,但在渲染 UI 时您想要的是GenericTypographic

    因此,您不想执行new StringFormat(),而是想要执行StringFormat.GenericTypographic.Clone()。这应该更正边距/间距,并为您提供与您在Graphics 表面上看到的内容相匹配的测量结果。

    我通常使用的策略是构建单个 StringFormat 实例并将其用于文本渲染和测量以确保排列整齐 - 我避免使用任何让我省略 StringFormat 的方法,因为默认值可能不是不是我想要的。

    希望这会有所帮助。如果您仍然遇到问题,请尝试发布更完整的代码 sn-p,以便我们查看您是如何绘制文本的。

    【讨论】:

      【解决方案2】:

      用途:

      TextBox tb = new TextBox { Text = "Test", Multiline = true };
      Size size = System.Windows.Forms.TextRenderer.MeasureText(tb.Text, tb.Font);
      Point location = new Point( //Is this what you were looking for?
          tb.Location.X + size.Width, 
          tb.Location.Y + size.Height);
      

      请注意,此方法还有其他重载,请查看。

      【讨论】:

      • 另外,如果我记得很清楚的话,在 DataGridViewCell 中还有这样的附加功能。
      【解决方案3】:

      我肯定是使用同一个 StringFormat 对象来测量和绘制文本。

      我最终做的是使用上面的代码,然后使用 TextRenderer 再次测量并相应地调整大小和位置

      【讨论】:

        猜你喜欢
        • 2016-01-13
        • 2014-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多