Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RichTextBox. Автовысота и редактирование текста. 
:(
    Опции темы
jcage
Дата 10.2.2009, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.2.2009

Репутация: нет
Всего: нет



Нужно с RichTextBox сделать следующее:
1. Сделать нередактируемый текст
2. Сделать что бы курсор мыши не отображался
3. Сделать так, что RichTextBox изменял свою высоту в зависимости от содержимого. Т.е. что бы VScrollBars никогда не появлялись.
4. Сделать так что бы при скроллинге скролился не сам box, а его parent.

Все это корректно работает, если Enabled = false; но тогда элемент становиться серым, а мне нужен элемент нормального цвета, но отвечающий требованиям выше.

P.S. когда Enabled = false изменение цвета фона и цвета шрифта элемента ни к чему не приводят.
PM MAIL   Вверх
Лен
Дата 12.2.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 20.1.2009

Репутация: нет
Всего: нет



1) ReadOnly = true;
2) текст и так после (1) нередактируемый, но можно ещё и Cursor.Hide(); для надёжности вызвать
3) ScrollBars = None; + обработчик TextChanged для установки размера
4) обработчики на HScroll / VScroll.
Enabled оставь true, хватит и изменения ReadOnly.
PM MAIL   Вверх
jcage
Дата 12.2.2009, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.2.2009

Репутация: нет
Всего: нет



Спасибо за ответ.

Есть ньансы.

1) ReadOnly = true; 
- после этого текст можно выделять.

2) текст и так после (1) нередактируемый, но можно ещё и Cursor.Hide(); для надёжности вызвать
Полностью пропадает сам курсор мыши. А я хочу, что бы курсор был обычной стрелкой, а "|" в поле RichTextBox не отображалась.

3) ScrollBars = None; + обработчик TextChanged для установки размера
Тут тоже проблема. С TextChanged понятно, но как получить высоту текста RTF не понятно - текст может быть разных шрифтов, содержать картинки, списки, быть жирным и т.д.

4) обработчики на HScroll / VScroll.
А поподробнее можно? Как передать родителю, что произошел scroll и его надо обработать?

Enabled оставь true, хватит и изменения ReadOnly.
PM MAIL   Вверх
Лен
Дата 13.2.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 20.1.2009

Репутация: нет
Всего: нет



1) Придётся на SelectionChanged вешать обработчик типа
Код

if (textBox.SelectionLength != 0)
  SelectionLength = 0;
 По-моему так можно будет "наводить выделение", но при отпусканиии кнопки мыши ничего не выделится. 
А можно и совсем уж извращенским методом пойти: положи поверх RichTextBox-а какой-нить контрол, и поставь ему прозрачность 100%.

2) Если так, то тебе просто нужно в дизайнере сделать Cursor = Default (вместо стандартного IBeam).

3) Высоту текста ручками придётся высчитывать, посмотри методы для определения габаритов текста в System.Drawing. Подробно не скажу - в C# я такие не юзал, в Делфях помнится были Canvas.TextWidth() и Canvas.TextHeight(). 

4) Напиши обработчики  событий HScroll / VScroll RichTextBox-а, а что в них писать - зависит от parent-контрола, на котором лежит  RichTextBox.
PM MAIL   Вверх
jcage
Дата 13.2.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.2.2009

Репутация: нет
Всего: нет



[qoute]
1) Придётся на SelectionChanged вешать обработчик типа
Код

if (textBox.SelectionLength != 0)
  SelectionLength = 0;
 По-моему так можно будет "наводить выделение", но при отпусканиии кнопки мыши ничего не выделится. 
А можно и совсем уж извращенским методом пойти: положи поверх RichTextBox-а какой-нить контрол, и поставь ему прозрачность 100%.
[/qoute]

Ну неужели нельзя сделать так что бы этот контрол впринципе не редактировался? Т.е. вел себя так же как Enabled=false, только с нормальными цветами?

3) Высоту текста ручками придётся высчитывать, посмотри методы для определения габаритов текста в System.Drawing. Подробно не скажу - в C# я такие не юзал, в Делфях помнится были Canvas.TextWidth() и Canvas.TextHeight(). 

Для RTF ничего не нашел. Для текста есть. ((

4) Напиши обработчики  событий HScroll / VScroll RichTextBox-а, а что в них писать - зависит от parent-контрола, на котором лежит  RichTextBox.

На форме лежит мой контрол. Не могу найти метод, который scroll вызовет(
PM MAIL   Вверх
Лен
Дата 16.2.2009, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 20.1.2009

Репутация: нет
Всего: нет



1) По ходу нельзя. 
3) Так и считай для текста. =) Можешь "на глаз" выводить - навряд ли тебе нужны строгие аццкие формулы для абсолютно точного вывода RTF.
4) Беглым взглядом не видно... А если попробовать Win32API-шным SendMessage()?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1049 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.