|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
10.04.2016, 22:53 | #1 |
Пользователь
Регистрация: 08.05.2014
Сообщений: 17
|
Поиск абсолютного индекса элемента в TreeView (C++/CLI Windows Forms)
Уважаемые коллеги! Помогите решить такую проблемку. Если объяснять коротко, то в Borland C++ Builder для элементов TreeView есть такое свойство AbsoluteIndex, который возвращает абсолютный индекс элемента в дереве TreeView, без учета вложенности уровней... Вот не могу никак найти аналогичное свойство в VC. Подскажите, пожалуйста, кто знает! Либо, если аналога и впрямь нет, то какой манипуляцией в VC можно этот АБСОЛЮТНЫЙ индекс получить?
А теперь опишу подробнее свой вопрос, основываясь на конкретной ситуации (если кому-то оказалось не совсем понятно, что я имею в виду из написанного выше). Имеется дерево вида: +Узел[0] - элем1 - элем2 . . . - элем8 +Узел[1] - элем1 . . . - элем6 В событии AfterSelect (выбираю элемент дерева щелчком мыши) если выбирая любой дочерний элемент, мне нужно получить его "порядковый номер" (абсолютный индекс). Пробовал воспользоваться свойством e->Node->Index; но так я получаю индексы дочерних элементов в каждом узле, начиная с нуля в каждом узле. Т.е. когда я выбираю, допустим, элемент1 Узла[1], я получаю индекс 0, а мне нужно, чтоб он был 9, соответственно для, например, элемента 3 Узла[1] он должен быть не 2, а 11. Т.е. в порядке начиная от (Узел[0],элем1) = 0 до (Узел[1],элем6) = 14. Подскажите, кто знает, как можно получить такую индексацию! Заранее спасибо! |
11.04.2016, 09:42 | #2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Ну всегда можно просто идти в цикле и считать элементы пока не дойдет до нужного. Или в Tag записать индекс.
Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
11.04.2016, 13:40 | #3 | |
Пользователь
Регистрация: 08.05.2014
Сообщений: 17
|
Цитата:
По поводу "для чего нужно". Чтоб было еще понятнее, действительно, пожалуй опишу подробнее всю суть чего я в результате хочу добиться. А может кто вообще другой подход для решения посоветует, а не такой как я выбрал... В общем, в моей программе в левой половине окна находится дерево устройств, подключенных к ПК по интерфейсу USB. Главных узла (как бы категории устройств) у меня два: USB устройства (TreeView1->Nodes[0]) и HID устройства (TreeView1->Nodes[1]). Получается, как я уже писал выше, у первого узла индекс 0, у второго 1 (но индексы самих узлов меня не интересуют), а вот их дочерние элементы (их индексы) у каждого узла начинаются с нуля. А в правой части окна программы есть ComboBox, в котором продублированы все эти же устройства (только дочерние элементы узлов, названия узлов в список не входит) сплошным списком, но в таком же порядке, как и в Дереве. Вот мне и нужно собственно, что бы когда я выбираю какой-либо элемент в дереве, то соответствующий ему в комбобоксе активировался в нем автоматически. Для этого я и хотел по индексу их сравнивать... Вот только в комбобоксе индексы записей идут сплошняком от 0 до N. А в дереве индексация разбита на две группы (каждая начинается с нуля). В Билдере эта задача чудесным образом решалась так: Код:
Если у кого будут какие-то альтернативные подходы к решению задачи, буду рад послушать и обсудить. P.S. Попробовал ваш вариант с циклом, но он ведь считает лишь общее кол-во дочерних узлов. А мне нужно при щелчке по одному любому узлу, получать его индекс. Последний раз редактировалось Cha1000000; 11.04.2016 в 14:03. |
|
11.04.2016, 13:52 | #4 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Кстати, а почему вдруг понадобилось переписывать с Билдера на .NET, да еще и на С++? (если .NET, то обычно намного проще взять C#, а на C++/CLI мало кто пишет, только для каких-нибудь специфичных задач по связыванию .NET сборок и нативного кода может быть смысл его брать)
Цитата:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 11.04.2016 в 14:39. |
|
11.04.2016, 14:38 | #5 | ||
Пользователь
Регистрация: 08.05.2014
Сообщений: 17
|
Цитата:
Ну, если с формальностями ("для чего и почему") разобрались, то хотелось бы вернуться к сути вопроса. Цитата:
Что-то пока не соображу как остановиться при нахождении выбранного узла? Вернее как это правильно записать... Последний раз редактировалось Alex11223; 11.04.2016 в 15:32. |
||
11.04.2016, 14:53 | #6 | |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Это не "студии" синтаксис, а .NET. По сути это не С++, а отдельный язык (на котором очень мало кто пишет, ибо для .NET есть C#, который проще и удобнее) похожий на С++, предназначенный для .NET.
Обычно все пишут либо на чистом С++ с С++ библиотеками (в т.ч. в студии, я например Qt использую в студии ), либо если .NET, то на C#. Цитата:
Я б лучше вариант с Tag использовал.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
11.04.2016, 15:08 | #7 | |
Пользователь
Регистрация: 08.05.2014
Сообщений: 17
|
Цитата:
Код:
|
|
11.04.2016, 15:10 | #8 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Вы только из второго (вложенного) цикла выходите.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
11.04.2016, 15:27 | #9 |
Пользователь
Регистрация: 08.05.2014
Сообщений: 17
|
Ой точно! Поторопился)) Действительно записал так:
Код:
А по поводу выбора среды разработки, тоже спасибо за советы по применению. Я уже и сам начал убеждаться, что для .NET C# удобнее и чтоб меньше голову ломать можно и на старом добром билдере оконные приложения клепать) Просто тут уже начал и неохота уже переделывать под другой средой или платформой, тем более, что сроки жмут, а мне тут еще функционал по обмену данными с выбранным из списка устройством надо разобраться как запилить. Задумка такая: хочу подключить, например, геймпад, выбрать его в списке HID устройств, а дальше мне надо будет как-то и куда-то (наверное просто в TextBox запилю) считывать пакетные данные из устройства и передавать в устройство пакеты... Ну это, как говорится, уже другая история. С этим я только собираюсь начать сегодня разбираться... |
11.04.2016, 15:30 | #10 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Зачем вы в Tag присваиваете если не используете? Про Tag имелось в виду так:
при заполнении Код:
Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C++/CLI Windows Forms Обработка сообщения WM_DEVICECHANGE | Cha1000000 | Windows Forms | 13 | 08.04.2016 00:52 |
Поиск индекса максимального элемента массива | alexchromets | Общие вопросы по Java, Java SE, Kotlin | 2 | 06.03.2013 23:02 |
DirectInput и джойстик (C++/CLI, Windows Forms) | Vistaern | Win Api | 1 | 21.02.2013 06:48 |
Проблема с выделением памяти в глобальной области windows forms(C++\CLI) | DartLenin | Помощь студентам | 2 | 24.01.2012 20:58 |
Проблема с отображением русского языка (Windows Forms C++ CLI) | Alex TGM | Помощь студентам | 0 | 17.08.2010 11:13 |