Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Разработка Windows Forms > RichTextBox. Автовысота и редактирование текста. |
Автор: jcage 10.2.2009, 21:04 |
Нужно с RichTextBox сделать следующее: 1. Сделать нередактируемый текст 2. Сделать что бы курсор мыши не отображался 3. Сделать так, что RichTextBox изменял свою высоту в зависимости от содержимого. Т.е. что бы VScrollBars никогда не появлялись. 4. Сделать так что бы при скроллинге скролился не сам box, а его parent. Все это корректно работает, если Enabled = false; но тогда элемент становиться серым, а мне нужен элемент нормального цвета, но отвечающий требованиям выше. P.S. когда Enabled = false изменение цвета фона и цвета шрифта элемента ни к чему не приводят. |
Автор: Лен 12.2.2009, 10:31 |
1) ReadOnly = true; 2) текст и так после (1) нередактируемый, но можно ещё и Cursor.Hide(); для надёжности вызвать 3) ScrollBars = None; + обработчик TextChanged для установки размера 4) обработчики на HScroll / VScroll. Enabled оставь true, хватит и изменения ReadOnly. |
Автор: jcage 12.2.2009, 10:40 |
Спасибо за ответ. Есть ньансы. 1) ReadOnly = true; - после этого текст можно выделять. 2) текст и так после (1) нередактируемый, но можно ещё и Cursor.Hide(); для надёжности вызвать Полностью пропадает сам курсор мыши. А я хочу, что бы курсор был обычной стрелкой, а "|" в поле RichTextBox не отображалась. 3) ScrollBars = None; + обработчик TextChanged для установки размера Тут тоже проблема. С TextChanged понятно, но как получить высоту текста RTF не понятно - текст может быть разных шрифтов, содержать картинки, списки, быть жирным и т.д. 4) обработчики на HScroll / VScroll. А поподробнее можно? Как передать родителю, что произошел scroll и его надо обработать? Enabled оставь true, хватит и изменения ReadOnly. |
Автор: Лен 13.2.2009, 15:10 | ||
1) Придётся на SelectionChanged вешать обработчик типа
А можно и совсем уж извращенским методом пойти: положи поверх RichTextBox-а какой-нить контрол, и поставь ему прозрачность 100%. 2) Если так, то тебе просто нужно в дизайнере сделать Cursor = Default (вместо стандартного IBeam). 3) Высоту текста ручками придётся высчитывать, посмотри методы для определения габаритов текста в System.Drawing. Подробно не скажу - в C# я такие не юзал, в Делфях помнится были Canvas.TextWidth() и Canvas.TextHeight(). 4) Напиши обработчики событий HScroll / VScroll RichTextBox-а, а что в них писать - зависит от parent-контрола, на котором лежит RichTextBox. |
Автор: jcage 13.2.2009, 15:24 | ||
[qoute] 1) Придётся на SelectionChanged вешать обработчик типа
А можно и совсем уж извращенским методом пойти: положи поверх RichTextBox-а какой-нить контрол, и поставь ему прозрачность 100%. [/qoute] Ну неужели нельзя сделать так что бы этот контрол впринципе не редактировался? Т.е. вел себя так же как Enabled=false, только с нормальными цветами? 3) Высоту текста ручками придётся высчитывать, посмотри методы для определения габаритов текста в System.Drawing. Подробно не скажу - в C# я такие не юзал, в Делфях помнится были Canvas.TextWidth() и Canvas.TextHeight(). Для RTF ничего не нашел. Для текста есть. (( 4) Напиши обработчики событий HScroll / VScroll RichTextBox-а, а что в них писать - зависит от parent-контрола, на котором лежит RichTextBox. На форме лежит мой контрол. Не могу найти метод, который scroll вызовет( |
Автор: Лен 16.2.2009, 10:36 |
1) По ходу нельзя. 3) Так и считай для текста. =) Можешь "на глаз" выводить - навряд ли тебе нужны строгие аццкие формулы для абсолютно точного вывода RTF. 4) Беглым взглядом не видно... А если попробовать Win32API-шным SendMessage()? |