当使用MeasureString时,"在GDI+中发生了一个通用错误"。

问题描述 投票:5回答:3

我有一个被覆盖的(WinForms)MemoEdit控件(不幸的是,我不能给你代码).如果我输入超过32000个字符,它会引发一个错误 "A generic error occurred in GDI+"我以为在我的控件中有一个错误(异常),但后来我在一个简单的WinForm应用程序上测试了这个代码。

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

有谁知道为什么会发生这种情况,或者在哪里指定了32000这个常数?我在谷歌上找不到任何有用的东西。

c# gdi+ measurestring
3个回答
2
投票

这似乎是Windows 8中引入的一个新错误。我很想知道在旧版Windows中的行为。

https:/connect.microsoft.comVisualStudiofeedbackdetails776722label-control-throws-an-exception-if-its-text-is-set-to-a-very-long-string。


0
投票

有可能是字符串宽度超过了Int32.Max (你可以参照 这条).

我知道,如果你使用的语言是阿拉伯语,涉及到特殊字符,你的错误就会发生(见 MSDN-Link: For bidirectional languages, such as Arabic, the string length must not exceed 2046 characters).

为了解决你的问题,我建议每31999个字符拆分一个字符串,并添加不同的大小长度。

© www.soinside.com 2019 - 2024. All rights reserved.