Стартовая страница › Форумы › Разработка и интеграция › Xml в TreeView со связью данных
- В этой теме 52 ответа, 4 участника, последнее обновление 2 месяца назад сделано JurasskPark.
-
АвторСообщения
-
13.06.2024 в 00:16 #32992manjey73Участник
Ну исходя из времени настройки окна Параметров, Универсальный интерфейс придется настраивать неделю под каждый новый драйвер.
Мне кажется подход в драйвере Modbus был бы более удобным, если бы он был доступен из View.
Смысл, есть ветка TreeView, в которой есть Атрибуты и Текстовые поля из Xml.
Все это выводим в окно справа и редактируем.Если что, то в Xml есть еще комментарии и CDATA. Первые можно использовать для вывода подсказок, второе для ввода специфических команд например.
13.06.2024 в 00:27 #32993manjey73УчастникДа, и создавать конфиг файл по номеру устройства очень не разумно.
Особенно для устройств, которые однотипны.По крайней мере для SNMP подход оказался неудачным.
13.06.2024 в 08:32 #32995manjey73УчастникИ вот @JurasskPark показал, что обычное окно можно вызвать как отдельно, так и встроить в свое окно без заголовка, кнопок сворачивания и закрытия.
Вот окна интерфейса RapidScada, которым можно дать данные и вызвать должны уметь делать так же. Я попробовал на окне Параметров, что-то не взлетело.Посмотрите этот момент, было бы полезно именно так делать.
- Этот ответ был изменен 5 месяцев, 3 недели назад от manjey73.
13.06.2024 в 09:31 #32997manjey73УчастникПосмотрел интерфейс mqtt. Сразу же возник вопрос — а если мне надо 3 ветки или больше? Это возможно добавить?
Потому что если только две ветки по аналогии с Подписка/Команды То универсальности уже нет.
Второй вопрос — вложенные ветки в те же Подписки/Команды возможны?Это вот к вопросам универсальности.
13.06.2024 в 09:39 #32998a80808УчастникКоллеги, а насколько нужна полная универсальность?
Пример из жизни — у нас работал уникальный прогамист, очень талантливый (сейчас он в США). У него тоже была идея всеобщей универсальности. В конце концов он изобрел универсальную подпрограмму — это было до наступления эры объектного программирования — (точнее набор) путем разных параметров можно было настроить на разные режимы работы. Так читать его программы было невозможно….13.06.2024 в 09:47 #32999manjey73Участник@a80808 я немного о другой универсальности говорю 🙂
1. возможность встраивать окно интерфейса, заложенного в RapidScada внутрь своего окна. Например мне нужно и окно Параметров и окно Настройки в дополнение к моему окну(окнам). Сейчас приходится вызывать как новое окно. Возможно нужно что-то сделать дополнительно, чтобы то же окно Параметров встроить в свое и у меня просто не получилось это сделать?
2. не зависеть от количества и типов данных в окнах. Например в окне Параметров это строковой Словарь. Начинаешь плясать с бубном чтобы добавить другие типы, занимаешься преобразованием, или например надо, чтобы к ключу словаря были привязаны несколько переменных сразу. И вот тот же Xml в атрибутах позволяет хранить булевые false/true. Да, в самом файле это пишется текстом, но для программы это переменная bool если ее сериализовать.
Причем переменные типа int я оставляю как строковые например для определенных целей, хотя там и int поддержан.13.06.2024 в 09:52 #33000manjey73Участник@a80808 то есть когда мы пишем строго под определенную задачу, универсальность и не нужна. А когда делаем что-то по нескольку раз постоянно это трындец как отнимает время…
Вот взять тот же интерфейс. Я посмотрел код mqtt, я там с бутылкой буду полгода разбираться, что к чему и как это окошко построить.
Плюс посмотрел что мне сделал @JurasskPark, очень даже прикольно получилось, но опять же, нет универсальности, под каждый новый вариант надо перепиливать, да еще понимать, что ты там делаешь…
Некоторые идеи просто вот запали 🙂Если проще. так как все конфигурационные файлы xml, почему бы не использовать его гибкость? Ты просто создаешь xml руками под конкретную задачу. Продумываешь структуру, названия переменных, количество веток и т.д.
А потом просто в готовый код View пихаешь этот xml и получаешь готовый интерфейс при этом не перепиливая глобально код View.
Вот чего хотелось бы добиться. Максимум, так это изменить набор картинок для веток дерева и указать какая картинка какой ветке драйвера будет принадлежать. Все.13.06.2024 в 12:46 #33003MikhailМодераторСразу же возник вопрос — а если мне надо 3 ветки или больше? Это возможно добавить?
Второй вопрос — вложенные ветки в те же Подписки/Команды возможны?Возможно. Поищите по исходникам модули и драйверы, в которых используется FrmModuleConfig, чтобы было больше примеров.
Что-то такое хотите сделать? http://rustemsoft.com/images/xfoxmain.gif
13.06.2024 в 13:34 #33004manjey73УчастникДа, что-то подобное, если можно так сказать.
Суть сделать View часть полностью отвязанной от принципа логики самого драйвера с минимальной правкой в дальнейшем.
И вариант запуска без правки вообще. То есть не назначать иконки веткам с проверкой что за ветка и как она привязана к самому драйверу, без создания выпадающих списков, если там не true/false — это все можно решить комментариями в самом xml файле.14.06.2024 в 12:49 #33011MikhailМодераторИнтересная идея для продвинутых пользователей, которых не пугает XML.
14.06.2024 в 13:46 #33014manjey73УчастникТак Xml там немного не будет пахнуть 🙂
Речь немножко о другом. Пишется драйвер, где я для конфигурации продумываю атрибуты, текстовые поля, комментарии и т.д. в файле xml.
Потом во View вставляю универсально заточенный код интерфейса под ЛЮБОЙ драйвер.
И исходя из описания драйвера просто меняем переменные.То есть берем готовый шаблон, загружаем, меняем имя устройства, другие настройки, говорим сохранить Как и получаем новый xml файл конфигурации.
Ну по сути ни чем не отличается от конфигуратора Modbus например или другого драйвера, только код будет заточен универсально. Добавление Комментариев будет из окна Администратора, а не прописано жестко в драйвере. В общем такой гибрид…
Сейчас научился менять значения Атрибутов через DataGridView 🙂
В общем еще потеть и потеть…..- Этот ответ был изменен 5 месяцев, 3 недели назад от manjey73.
14.06.2024 в 13:49 #33016manjey73УчастникА уже чтобы не подсунуть чужой конфиг в определенный драйвер, наверное надо будет добавить атрибут, и по нему проверять. Или проще сделать вместо корня DevTemplate например IEC61107DeviceConfig и это имя прописать дополнительно во View. типа корень другой, значит шаблон от другого драйвера.
Сейчас пока такой проверки нет, читаю любой xml, разбираюсь как менять значения и т.д….
Главное, что я могу полностью прочитать дерево и сохранить его обратно. Правда с редактированием тоже сложности. Учитывая что параметры это атрибуты xml то их проще вытащить в DataGridView с привязкой и проще сделать событие на изменение ячейки.
Чем делать через ListView и накладывать текстовое поле для редактирования.В общем смысл сделать универсальный такой мини редактор для конфигурации драйверов.
18.06.2024 в 10:36 #33081manjey73УчастникКак победить TextChanged?
Сейчас у меня используется это свойство, все вроде меняется, что требуется, но, это свойство вызывается каждое изменение буквы, а там происходит циклическая перезапись словарей.
Использовать LostFocused не получается, окно вызывается внутри TabControl другого окна, соответственно выбранные Ноды уже другие.Может кто идею подскажет как что-то запустить один раз, после того как изменения уже произошли?
18.06.2024 в 11:57 #33083MikhailМодераторКомпонент TreeView?
18.06.2024 в 12:08 #33085manjey73УчастникДа, я в TreeView в Tag сохраняю словари Атрибутов, Комментариев, Текста, CData из Xml файла.
Потом в TabControl показываю все из SelectedNode и могу редактировать, потом надо обновлять после изменения словари в Tag чтобы все корректно отображалось.
И получается если использовать TextChanged как есть, то обновления происходят каждую букву. А хотелось бы после потери фокуса например, но тогда уже будет другой SelectedNode, к тому же он же и измененный.
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.