2015-05-31 2 views
4

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

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

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

+1

Добро пожаловать на переполнение стека! Я редактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

+0

Какой шрифт и размер вы используете? – Icemanind

+0

На моем компьютере он работает вплоть до '65535'. Он разбивается на '65536' – Icemanind

ответ

0

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

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

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

+0

32000! = 32k. Кроме того: это то, что сдерживает MeasureString, а не назначение строки .. – TaW

+0

@TaW: Я знаю, что я имел в виду, что ширина строки ** в пикселе ** больше, чем Int32 – Unknown6656

+0

Да, ну, это любопытно: 32000 работает, а 32001 - нет. Нет ширины строки в пикселе, кроме 1000 пикселей, которые он подает в MeasureString. И результирующая высота (что он фактически измеряет) составляет несколько сотен пикселей в зависимости от шрифта. Источники приводят к основной рутине, проходящей по длине как int .. довольно странно. – TaW

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

+0

Эта ссылка не работает. Любая идея, если есть новая ссылка на эту проблему? –

+0

Они не хотят это исправлять, я понимаю. Последние две записи можно найти в кешированной версии веб-страницы. http://webcache.googleusercontent.com/search?q=cache:LHbEaBO6c-EJ:https://connect.microsoft.com/VisualStudio/feedback/details/776722/label-control-throws-an-exception-if- его-text-is-set-to-a-very-long-string –

+0

Спасибо за ссылку на кешированную страницу, Фрэнк. Ну, это не сулит ничего хорошего для нового отчета об ошибке, который я только что открыл пару дней назад (https://connect.microsoft.com/VisualStudio/feedback/details/1850428/graphics-measurestring-throws-exceptions-for-long -струны-в-Win8-техника его подводит-в-предыдущих-версий-оф-окон). Мы сталкиваемся с этой проблемой на любой машине Win8 или более поздней версии, что, похоже, объясняет это другим сообщением об ошибке. Я еще не получил ответа от MS, но я сомневаюсь, что мне понравится их ответ ... –

 Смежные вопросы

  • Нет связанных вопросов^_^