Страницы

Поиск по вопросам

четверг, 2 апреля 2020 г.

Как в Windows Forms сделать надчеркивание?(логическое отрицание)

#c_sharp #winforms

                    
Именно на формах, а не на wpf. 
Допустим, по нажатию кнопки выделенный текст надчеркивается, например: 

    


Ответы

Ответ 1



В WinForms с красивостями плохо. Надчеркивание стандартными средствами не возможно в принципе, т.к. за стиль шрифта в System.Drawing (GDI+) отвечает перечисление FontStyle, которое ни чего не знает о надчеркивании. RichTextBox тут тоже не помощник, потому что его контент рисует все тот же System.Drawing (GDI+). В этом легко убедиться на примере стандартного WordPad, в котором раскрыты все или почти все возможности RichTextBox в плане форматирования текста, не хватает только некоторых возможностей rtf-разметки, которые впрочем не особенно и нужны в виду наличия более удобных и современных форматов. Альтернативные варианты: Для одной буквы можно воспользоваться комбинированными символами unicode, а именно символом надчеркивания: код 0x0305, например так: "a\x0305" - a̅; или так:"Y\x0305" - Y̅. Для длинного текста такой вариант не подходит, т.к. потребуется вставлять этот символ после каждой буквы текста. Плюс ко всему, такие составные символы не всегда корректно отображаются, надстрочные и подстрочные знаки могут "съезжать" в сторону, например так: ы̅ Можно разместить на форме хостинг для WPF контролов ElementHost и воспользоваться всей оформительской мощью WPF. На самый крайний случай всегда остается возможность просто нарисовать и текст и линии надчеркивания средствами System.Drawing (GDI+) на обычном Bitmap или прямо на контроле, но как вы понимаете, ни каком выделении текста мышкой и редактировании не может быть и речи, если конечно вы не страдаете от острого приступа мазохизма и/или трудоголизма =) ну или интерес исключительно академического характера.

Комментариев нет:

Отправить комментарий