![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| vponomarov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 11.8.2007 Где: Киев Репутация: 5 Всего: 12 |
Подскажите как узнать ширину лэйбла необходимую для того, чтобы в него полностью поместился заданный текст.
Graphics.MeasureString() дает неточные результаты и текст часто обрезается. |
|||
|
||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
Graphics.MeasureString() даёт очень даже точные числа. Может, ты забыл учесть Margin или Padding в своих вычислениях?.. А ещё у лейбла есть AutoSize = true
|
|||
|
||||
| vponomarov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 11.8.2007 Где: Киев Репутация: 5 Всего: 12 |
Margin и Padding равны 0.
Автосайз мне не подходит, нужно вручную просчитывать... Это сообщение отредактировал(а) vponomarov - 24.3.2008, 16:13 |
|||
|
||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
а можно тогда пример неточного измерения? а то я не видел чтобы оно неточно мерило.
|
|||
|
||||
| vponomarov |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 11.8.2007 Где: Киев Репутация: 5 Всего: 12 |
без проблем:
w=296, а чтобы поместилась все строка должно быть миниму 316... |
||||
|
|||||
| Dogo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 3 Всего: 9 |
Хм а у меня высчитывает длину чуть большею чем нужно...
Вылечил вот так:
--------------------
|
|||
|
||||
| vponomarov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 11.8.2007 Где: Киев Репутация: 5 Всего: 12 |
Dogo, на тестовом примере (см. пост выше) все равно дает меньший результат - 284 вместо нужных 316:(
|
|||
|
||||
| Dogo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 3 Всего: 9 |
Да у меня тоже "284". Точнее "283.5454". А разве этого не достаточно?
Померил Photoshop'ом, достаточно 280px. --------------------
|
|||
|
||||
| Optimus |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 1.9.2007 Репутация: 2 Всего: 14 |
Можно узнать как вы это вычислили ? Можно посмотреть что за Font. --------------------
"постановка задачи наполовину решает саму задачу" |
|||
|
||||
| vponomarov |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 11.8.2007 Где: Киев Репутация: 5 Всего: 12 |
Dogo, в том-то и прикол, что сам текст занимает 283.5454 пикселя, но при выводе его через лэйбл - этого не достаточно и он обрезает текст
при чем не просто то, что не помещается, а все последнее слово (даже если не поместится всего один пиксель:( )
label2.PreferedWidth
this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); |
||||
|
|||||
| Dogo |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 3 Всего: 9 |
vponomarov, у вас в строчке, которую хотите показать в label'е, случайно в конце нет пробельных символов?
А как видно из примера и иллюстрации рассчитанного с помощью MeasureString() пространства более чем достаточно для вывода строки... PS. Странно, но при использовании ваших условий
--------------------
|
||||
|
|||||
| Kefir |
|
||||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: нет Всего: 87 |
vponomarov, в общем всё ясно. я наконец-то догнал что к чему. Label юзает другой метод для отрисовки текста, нежели чем банальный Graphics.MeasureString. оно юзает TextRenderer.MeasureText (уж и не знаю почему - в рефлекторе подглядел). Посему вместо
просто напишите
и сразу получается 280, что и есть реальный размер строки. Это сообщение отредактировал(а) Kefir - 24.3.2008, 23:56 |
||||
|
|||||
| Dogo |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 147 Регистрация: 20.2.2007 Где: Санкт-Петербург Репутация: 3 Всего: 9 |
Можно вообще проще поступить
--------------------
|
|||
|
||||
| altarvic |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 87 Регистрация: 2.3.2007 Репутация: нет Всего: 1 |
TextRenderer использует GDI для отрисовки текста, а Graphics.DrawString() - GDI+
Как ни странно, но качество отрисовки текста выше у GDI, поэтому был введен метод SetCompatibleTextRendering (у Application) и у Label'а есть свойство UseCompatibleTextRendering и если посмотреть метод OnPaint(PaintEventArgs e) у Label'а, то видно что там отрисовка зависит от UseCompatibleTextRendering. Это сообщение отредактировал(а) altarvic - 25.3.2008, 07:45 |
|||
|
||||
| vponomarov |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 407 Регистрация: 11.8.2007 Где: Киев Репутация: 5 Всего: 12 |
Kefir, вот это реально дельный совет!
респект и уважуха спасибо! |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |