![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| AHgpeu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
Нужно добавить в текст ссылку как объект (со своими полями и методами).
Как например в ComboBox можно добавить объект и показать его Caption. То же самое нужно для ссылки. Кто-то может подсказать куда смотреть? Сейчас мучаю RichTextBox. Но если есть альтернативы - буду только рад! --------------------
ᆉᆈǀƿᆇᆆᆅᆂᆁᆇᆆ |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
какой именно ComboBox используете? Винформс или WPF?
В зависимости от этого детали реализации могут отличаться. Но общим принцип один: - создавать коллекцию объектов пользовательского класса (например класс MyClass со свойствами Caption, Value... что там еще..) - коллекцию биндить к ComboBox как Source (ItemSource, BindingSource - нужно смотреть по конкретной технологии, о чем я выше говорил) - указывать для ComboBox, что именно свойство Caption айтема будет использоваться в качестве display member в любом случае нужно смотреть в сторону binding-а ComboBox к коллекции пользовательских объектов (или к одному объекту, но который все равно выступает как binding source) -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| AHgpeu |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
tol05, вы меня не поняли
Это не вопрос. А пример того что мне нужно. Только объект мне нужно добавить не в комбобоксе. А в каком-нибудь текстовом редакторе. типа такого:
--------------------
ᆉᆈǀƿᆇᆆᆅᆂᆁᆇᆆ |
||||
|
|||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
теперь понятно еще меньше.
Что значит "добавить"? Обратитесь к свойству MyObject.MyCaption, получите строку, добавьте к тексту конкатенацией альтернатив - много. Ровно столько же, сколько Кол-воКонтролов Х Кол-воИхСвойств Это не ответ. А пример того, что я сейчас думаю -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| AHgpeu |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
tol05, ну вот смотрите.
В моем тексте есть несколько ссылок (они НЕ являются ссылками на стр. в интернет). Эти ссылки просто указывают что на какое-то слово или фразу можно нажать и произойдет какое-то действие. Мне бы хотелось чтобы каждая такая ссылка являлась объектом. И По нажатию на нее - я бы мог вытащить этот объект и сделать свой метод
А у объекта MyLinkObject есть поле, например ID и в зависимости от этого ID в
выполняются различные действия --------------------
ᆉᆈǀƿᆇᆆᆅᆂᆁᆇᆆ |
||||
|
|||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
ок. эти ссылки имеют какое-то визуальное представление? В виде UI контрола? Если Вы хотите на нее нажимать - значит да, есть. Создаете event-handler для клика на этих контролах. Биндите хандлер ко всем контролам без исключения. К контролу биндите свой объект. Как угодно, через DataSource, Source, BindingSource ... да хоть через Tag. Это зависит от того, какой контрол будет представлять Вашу ссылку (визуально). Главное, чтобы можно было в хандлере (через параметр sender или eventArgs) добраться до прибинденного объекта MyLinkObject. ну а дальше - все просто. Вставляете в текущую позицию целевого контрола значение MyLinkObject.Caption -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| AHgpeu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
мм.. не совсем так. Эти ссылки - всего лишь текст в компоненте RichTextBox. Но так как они "помечены как ссылка" (как если бы это был текст "http://forum.vingrad.ru") - то они кликабельны. --------------------
ᆉᆈǀƿᆇᆆᆅᆂᆁᆇᆆ |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
мда. наконец-то все прояснилось. К чему только Combobox вспоминать было?
судя по RichTextBox.DetectUrls Property можно написать обработчик события LinkClicked и в нем работать с LinkText. Создавать например объект MyLinkObject. Или искать его в уже существующей коллекции объектов MyLinkObject по критерию MyLinkObject.LinkText == clickedLinkText и вызывать у него DoMethod(). -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| AHgpeu |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
к сожалению в тексте могут быть ссылки с идентичными LinkText
Но они должны будут выполнять разные действия. Поэтому сравнение со стандартным LinkText не прокатит..... т.е.
но, конечно же
Добавлено через 1 минуту и 46 секунд именно поэтому нужно "вытащить" из clickedLink сам объект MyLinkObject ... Так же как это делалось бы для ComboBox'a, в который тоже запихнули Object --------------------
ᆉᆈǀƿᆇᆆᆅᆂᆁᆇᆆ |
||||
|
|||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
создайте Dictionary<MyKey, MyLinkObject> и заполняйте его при загрузке документа в RichTextBox
MyKey - какой-нибудь ключ, указывающий на позицию линка относительно начала документа. Т.о. гарантируется логическая идентификация линков с одиннаковым текстом. Кроме того, для линков с одинаковым текстом возможно задавать как различные объекты MyLinkObject, так и один и тот же объект. Событие clickedLink все равно обрабатывать прийдется. Но в обработчике главной задачей будет выяснение позиции линка относительно начала документа (ключа), и нахождение в словаре нужного объекта MyLinkObject по этому ключу. Думаю это будет не очень сложно. -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| AHgpeu |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 124 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
tol05, но как узнать позицию линка относительно начала документа?
Учитывая, что линки могут иметь один и тот же текст поиск по
будет некорректно работать --------------------
ᆉᆈǀƿᆇᆆᆅᆂᆁᆇᆆ |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
я бы обошел последовательно весь документ, для каждого линка запомнил его startPosition и endPosition (в строке текста). Также можно запомнить номер строки.
Все это я бы сохранил в структуре, которая будет ключом словаря для конкретного линка. потом
Событие clickedLink в таком случае можно и не обрабатывать. -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |