5

オーバーライドされた (WinForms) MemoEdit コントロールがあります (残念ながら、コードを提供できません)。32000 文字を超える文字を入力すると、「GDI+ で一般的なエラーが発生しました」というエラーが発生します。コントロールにエラー (例外) があると思いましたが、単純な WinForm アプリケーションで次のコードをテストしました。

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

そして、それはまったく同じエラーでクラッシュしますなぜこれが起こるのか、またはこの定数 32000 がどこで指定されているのか知っている人はいますか? Google で役立つ情報が見つかりませんでした。

4

2 に答える 2

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

于 2015-06-03T22:20:02.167 に答える
0

文字列の幅が Int32.Max を超えている可能性があります (このスレッドを参照してください)。

特殊文字を含む言語をアラビア語として使用するとエラーが発生することはわかっています ( MSDN-Link :を参照For bidirectional languages, such as Arabic, the string length must not exceed 2046 characters)。

問題を解決するには、文字列を 31999 文字ごとに分割し、異なるサイズ/長さを追加することをお勧めします。

于 2015-05-31T10:33:21.560 に答える