使用MeasureString

时间:2015-05-31 09:48:56

标签: c# gdi+ measurestring

我有一个覆盖(WinForms)MemoEdit控件(遗憾的是我不能给你代码)。 如果我输入超过32000个字符,则会引发错误“GDI +中发生一般错误” 我认为我的控件中有一个错误(异常),但后来我在一个简单的WinForm应用程序上测试了这段代码:

var myString = new string('G', 32001);
var g = this.CreateGraphics();
g.MeasureString(myString, Font, 1000);

它崩溃了同样的错误 有谁知道为什么会发生这种情况或指定这个常数为32000?我在谷歌上找不到任何有用的东西。

2 个答案:

答案 0 :(得分:2)

这似乎是Windows 8中引入的一个新错误。我会对旧版Windows中的行为感到好奇:

https://connect.microsoft.com/VisualStudio/feedback/details/776722/label-control-throws-an-exception-if-its-text-is-set-to-a-very-long-string

答案 1 :(得分:0)

字符串宽度可能超过Int32.Max(您可以参考this thread)。

我知道如果您使用包含特殊字符的阿拉伯语作为您的错误(请参阅MSDN-LinkFor bidirectional languages, such as Arabic, the string length must not exceed 2046 characters)。

要解决您的问题,我建议每31999个字符拆分字符串并添加不同的尺寸/长度。