|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.08.2013, 12:27 | #1 |
Участник клуба
Регистрация: 13.01.2009
Сообщений: 1,353
|
Пишу контрол (ExTreeView)
Дизассемблировал код стандартной библиотеки WinForms и посмотрел, как устроен TreeView - понял, что сделать точно также не получится, ибо нужно переписывать все internal классы, которые он использует в своей сборке, в частности: UnsafeNativeMethods и прочее.
Наследуюсь я от класса Control. То, что я уже сделал работает на "ура", очень быстро и без проблем, но, проблема стоит в том, чтобы создать событие OnMouseClick для узлов дерева. Мои узлы дерева (ExTreeNode class) не наследуются от Control, они вообще, не наследуют ничего. Задача стоит в том, чтобы отловить нажатие клавиши мыши на Glyph узла или на сам узел и уже далее выполнить событие открытия или закрытия. Может кто-нибудь помочь разобраться?
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
|
14.08.2013, 17:03 | #2 |
Старожил
Регистрация: 06.08.2007
Сообщений: 2,183
|
Как насчет VirtualTreeView
|
14.08.2013, 21:29 | #3 |
Участник клуба
Регистрация: 13.01.2009
Сообщений: 1,353
|
Alter, контрол должен иметь свойство DataSource с возможностью развертки из реляционной таблицы (где строки имеют ссылки на другие строки - родитель -> ребенок и т.д.) базы. Я посмотрю попозже, можно ли наследовать его и прикрутить это свойство. Спасибо за предложение!
___________________________________ ___ В общем, что хочется сказать по этому поводу. Попробовал я сделать через WndProc, но тут же наступил на очередные грабли. С помощью функции SendMessage мне не удалось получить IntPtr на узел дерева. Думать дальше не стал и пошел другим путем. Он чуть медленнее по скорости, но имеет право на жизнь. Я создал объект Hashtable, и добавил туда все узлы в событии добавления узлов к дереву. В итоге получилась таблица типа: ключ:значение. При событии клика мыши по компоненту, перебираются все ключи этой таблицы и точка клика проверяется на вхождение в область узла (Region). Если она входит в эту область, вызывается функция клика мыши по узлу и в функции проверяется вхождение точки клика в область глифа узла, если входит, то выполняем Collapse или Expand, если нет, - меняем состояние узла. Всего-то делов было Код:
Код:
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
Последний раз редактировалось ImmortalAlexSan; 15.08.2013 в 11:32. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Контрол в контроле | odson | ASP.NET | 1 | 20.04.2012 09:17 |
Контрол | nats | C# (си шарп) | 7 | 14.02.2012 14:49 |
двигаю контрол мышкой, почему мышка перемещается быстрее чем контрол | PaulRom | Microsoft Office Access | 0 | 06.12.2011 11:19 |
контрол | Maxxx 83 | Помощь студентам | 2 | 01.02.2009 14:08 |
Делаю сайты, пишу маленькие/большие скрипты. Пишу веб-приложения и приложения под Windows. | SkyM@n | Фриланс | 3 | 29.12.2007 16:21 |