"Произошла общая ошибка в GDI+" при использовании MeasureString

У меня есть переопределенный (WinForms) элемент управления MemoEdit (к сожалению, я не могу дать вам код). Если я ввожу более 32000 символов, возникает ошибка "В GDI+ произошла общая ошибка". Я подумал, что в моем элементе управления есть ошибка (исключение), но затем я протестировал в простом приложении WinForm этот код:

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

и он вылетает с точно такой же ошибкой Кто-нибудь знает, почему это происходит или где указана эта константа 32000? Я не смог найти ничего полезного в Google.

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

Возможно, ширина строки превышает Int32.Max (возможно, вы можете обратиться к этой теме).

Я знаю, что ваша ошибка возникает, если вы используете арабский язык, который включает специальные символы (см. MSDN-Link: For bidirectional languages, such as Arabic, the string length must not exceed 2046 characters).

Чтобы решить вашу проблему, я бы предложил разделить строку на каждый 31999-й символ и добавить разные размеры / длины.

Другие вопросы по тегам