| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Работа со ссылками |
| Автор: AHgpeu 29.12.2009, 12:27 |
| Нужно добавить в текст ссылку как объект (со своими полями и методами). Как например в ComboBox можно добавить объект и показать его Caption. То же самое нужно для ссылки. Кто-то может подсказать куда смотреть? Сейчас мучаю RichTextBox. Но если есть альтернативы - буду только рад! |
| Автор: tol05 29.12.2009, 12:54 |
| какой именно ComboBox используете? Винформс или WPF? В зависимости от этого детали реализации могут отличаться. Но общим принцип один: - создавать коллекцию объектов пользовательского класса (например класс MyClass со свойствами Caption, Value... что там еще..) - коллекцию биндить к ComboBox как Source (ItemSource, BindingSource - нужно смотреть по конкретной технологии, о чем я выше говорил) - указывать для ComboBox, что именно свойство Caption айтема будет использоваться в качестве display member в любом случае нужно смотреть в сторону binding-а ComboBox к коллекции пользовательских объектов (или к одному объекту, но который все равно выступает как binding source) |
| Автор: AHgpeu 29.12.2009, 13:00 | ||||
tol05, вы меня не поняли
Это не вопрос. А пример того что мне нужно. Только объект мне нужно добавить не в комбобоксе. А в каком-нибудь текстовом редакторе. типа такого:
|
| Автор: tol05 29.12.2009, 13:14 |
| теперь понятно еще меньше. Что значит "добавить"? Обратитесь к свойству MyObject.MyCaption, получите строку, добавьте к тексту конкатенацией альтернатив - много. Ровно столько же, сколько Кол-воКонтролов Х Кол-воИхСвойств Это не ответ. А пример того, что я сейчас думаю |
| Автор: AHgpeu 29.12.2009, 13:29 | ||||
| tol05, ну вот смотрите. В моем тексте есть несколько ссылок (они НЕ являются ссылками на стр. в интернет). Эти ссылки просто указывают что на какое-то слово или фразу можно нажать и произойдет какое-то действие. Мне бы хотелось чтобы каждая такая ссылка являлась объектом. И По нажатию на нее - я бы мог вытащить этот объект и сделать свой метод
А у объекта MyLinkObject есть поле, например ID и в зависимости от этого ID в
выполняются различные действия |
| Автор: AHgpeu 29.12.2009, 14:13 | ||
мм.. не совсем так. Эти ссылки - всего лишь текст в компоненте RichTextBox. Но так как они "помечены как ссылка" (как если бы это был текст "http://forum.vingrad.ru") - то они кликабельны. |
| Автор: tol05 29.12.2009, 14:45 |
| мда. наконец-то все прояснилось. К чему только Combobox вспоминать было? судя по http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.detecturls.aspx можно написать обработчик события LinkClicked и в нем работать с LinkText. Создавать например объект MyLinkObject. Или искать его в уже существующей коллекции объектов MyLinkObject по критерию MyLinkObject.LinkText == clickedLinkText и вызывать у него DoMethod(). |
| Автор: AHgpeu 29.12.2009, 15:22 | ||||
| к сожалению в тексте могут быть ссылки с идентичными LinkText Но они должны будут выполнять разные действия. Поэтому сравнение со стандартным LinkText не прокатит..... т.е.
но, конечно же
Добавлено через 1 минуту и 46 секунд именно поэтому нужно "вытащить" из clickedLink сам объект MyLinkObject ... Так же как это делалось бы для ComboBox'a, в который тоже запихнули Object |
| Автор: tol05 29.12.2009, 16:11 |
| создайте Dictionary<MyKey, MyLinkObject> и заполняйте его при загрузке документа в RichTextBox MyKey - какой-нибудь ключ, указывающий на позицию линка относительно начала документа. Т.о. гарантируется логическая идентификация линков с одиннаковым текстом. Кроме того, для линков с одинаковым текстом возможно задавать как различные объекты MyLinkObject, так и один и тот же объект. Событие clickedLink все равно обрабатывать прийдется. Но в обработчике главной задачей будет выяснение позиции линка относительно начала документа (ключа), и нахождение в словаре нужного объекта MyLinkObject по этому ключу. Думаю это будет не очень сложно. |
| Автор: AHgpeu 30.12.2009, 15:08 | ||
| tol05, но как узнать позицию линка относительно начала документа? Учитывая, что линки могут иметь один и тот же текст поиск по
будет некорректно работать |
| Автор: tol05 30.12.2009, 17:46 | ||
| я бы обошел последовательно весь документ, для каждого линка запомнил его startPosition и endPosition (в строке текста). Также можно запомнить номер строки. Все это я бы сохранил в структуре, которая будет ключом словаря для конкретного линка. потом
Событие clickedLink в таком случае можно и не обрабатывать. |