![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Приветствую, господа!
Вот код, который я состряпал для нахождения положения каретки в RichTextBox. Конечно он оставляет желать лучшего, но тем не менее мне не удалось (не используя API) сделать его более эффективным и красивым. Может вы бы могли сделать что-то получше?
И еще, в справке описано много методов для того, чтобы поставить каретку в нужную позицию, но наоборот - ничего. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
РичТекстБокс.SelectionStart
Доступен как для чтения, так и для записи. -------------------- С уважением, А. Фролов. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Это ведь многострочный контрол, так можно узнать только в ЕдитБоxе.
Моя же функция работает для многострочных контролов. Ведь длина каждой строки разная... -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Единственное - нужно поставить на обработчик OnSelectionChange. Вот код для общего случая (AntonSaburov, может стоит это положить в "записки программиста"?):
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 1 Всего: 118 |
Поищи среди этих функций:
- GetPositionFromCharIndex - GetCharIndexFromPosition - GetLineFromCharIndex В принципе можно повозиться здесь. Также посмотреть свойство Lines. А свойство SeletionStart работает на любом контроле - просто строка уезжает. Когда что-то конкретное получится - кинь в находки. Буду крайне признателен. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Дык, я именно там и лазил и то что сверху и удалось мне написать. Все работает, я просто удивляюсь как это мелкософт не реализовала такую возможность? Столько всякого реализовала, а эту фичу - нет. Ну тогда я запостю именно этот метод, т.к. он работает 100%.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 1 Всего: 118 |
Давай исправлять - это не работает на 100%. Попробуй вставить строку, которая будет резаться самим контролом (без нажатия на Enter). Лучше подлиннее и вызови свою функцию - упадет из-за превышения размера массива. (Index was outside the bounds of the array) Так что надо дорабатывать - опубликуй еще раз в находках. А я старый вариант пока помечаю, как нерабочий. Без обид ? |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Да какие обиды?
Исправлю. Это вы извиняйте, что дырявый код вам подсунул -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
Не, так не получится, это только ежели ты в конце каждой строчки Ентер жмешь.... Антон прав.
А так немного сложнее будет. Единственно, что можно сделать - это отслеживать строки и смотреть, чтобы суммарная их длина не превышала текущую. Но ежели это последняя строка, то вылетает ошибка. Вопрос - как определить - существует ли строка с таким номером (внутренне представление)? Надо что-то вроде этого:
Да, я пробовал находить индекс в этой строке, но в нулевой позиции GetPositionFromCharIndex, не помогает. Это сообщение отредактировал(а) Alex101 - 24.4.2003, 16:04 -------------------- С уважением, А. Фролов. |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
Да, и еще - а надо ли оно? Ведь ежели внутреннее представление отличается от визуального, то все равно работать с внутренним, а координаты можно вычислить через GetPositionFromCharIndex (чтобы нарисовать - я туда textBox помещаю).
-------------------- С уважением, А. Фролов. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Да, но ведь 8 точек и 8 букв 'д' имеют разную длину в пикселях, так что индекс не поможет. Я вот прямо сейчас пишу решение этой задачи, через пол часа, думаю, отлажу и закину.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
GetPositionFromCharIndex возвращает как раз точки...
Единственное, что надо - это определить, существует ли строка...
-------------------- С уважением, А. Фролов. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
А надо индекс символа! Причем от начала строки, которая в Lines property.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
Понятно, что индекс. я хотел взять разность индексов - искомого символа, и того символа, который самый первый - член структуры System.Drawing.Point X устанавливаю в ноль, згаченгие Y из текущего, полученного с помощью GetPositionFromCharIndex, но что-то не выходит каменный цветок...
-------------------- С уважением, А. Фролов. |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
Идея такова:
У этого способа два глюка - когда переносим на новую строку, или когда в самом конце строки находится символ, то неправильно определяет. Это сообщение отредактировал(а) Alex101 - 24.4.2003, 17:30 -------------------- С уважением, А. Фролов. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
A это мой код. Такие же проблемы.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
На самом деле глюк только один - это когда коретка в конце всего текста стоит. Причем только в пустой строке. То есть если вы набрали текст и нажали "Ввод".
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
Там надо события еще обработать - KeyPress и ... что-то еще, что позволило бы отследить, что на этой строке мы больше ничего не напишем, хотя бы сравнить GetPositionFromCharIndex с шириной контрола.
Допиши уж, я на работе засиделся, кушать хочется -------------------- С уважением, А. Фролов. |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: нет Всего: 10 |
Нет, если в начале строки, то выдает "1", также как и второй символ в строке. -------------------- С уважением, А. Фролов. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Во как! Все пашет!!! Ура! Несколько подругому, правда... Без событий, но работает!
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Нет, у меня тот способ нормально работал (в таком случае). -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
А это для обшего случая. Антон, запости пожалуйста в заметки, а то как-то неудобно...
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |