"Произошла общая ошибка в 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:
Возможно, ширина строки превышает Int32.Max (возможно, вы можете обратиться к этой теме).
Я знаю, что ваша ошибка возникает, если вы используете арабский язык, который включает специальные символы (см. MSDN-Link: For bidirectional languages, such as Arabic, the string length must not exceed 2046 characters
).
Чтобы решить вашу проблему, я бы предложил разделить строку на каждый 31999-й символ и добавить разные размеры / длины.