Xml в TreeView со связью данных

Стартовая страница Форумы Разработка и интеграция Xml в TreeView со связью данных

Просмотр 15 сообщений - с 16 по 30 (из 53 всего)
  • Автор
    Сообщения
  • #32992
    manjey73
    Участник

    Ну исходя из времени настройки окна Параметров, Универсальный интерфейс придется настраивать неделю под каждый новый драйвер.

    Мне кажется подход в драйвере Modbus был бы более удобным, если бы он был доступен из View.

    Смысл, есть ветка TreeView, в которой есть Атрибуты и Текстовые поля из Xml.
    Все это выводим в окно справа и редактируем.

    Если что, то в Xml есть еще комментарии и CDATA. Первые можно использовать для вывода подсказок, второе для ввода специфических команд например.

    #32993
    manjey73
    Участник

    Да, и создавать конфиг файл по номеру устройства очень не разумно.
    Особенно для устройств, которые однотипны.

    По крайней мере для SNMP подход оказался неудачным.

    #32995
    manjey73
    Участник

    И вот @JurasskPark показал, что обычное окно можно вызвать как отдельно, так и встроить в свое окно без заголовка, кнопок сворачивания и закрытия.
    Вот окна интерфейса RapidScada, которым можно дать данные и вызвать должны уметь делать так же. Я попробовал на окне Параметров, что-то не взлетело.

    Посмотрите этот момент, было бы полезно именно так делать.

    • Этот ответ был изменен 5 месяцев, 3 недели назад от manjey73.
    #32997
    manjey73
    Участник

    Посмотрел интерфейс mqtt. Сразу же возник вопрос — а если мне надо 3 ветки или больше? Это возможно добавить?

    Потому что если только две ветки по аналогии с Подписка/Команды То универсальности уже нет.
    Второй вопрос — вложенные ветки в те же Подписки/Команды возможны?

    Это вот к вопросам универсальности.

    #32998
    a80808
    Участник

    Коллеги, а насколько нужна полная универсальность?
    Пример из жизни — у нас работал уникальный прогамист, очень талантливый (сейчас он в США). У него тоже была идея всеобщей универсальности. В конце концов он изобрел универсальную подпрограмму — это было до наступления эры объектного программирования — (точнее набор) путем разных параметров можно было настроить на разные режимы работы. Так читать его программы было невозможно….

    #32999
    manjey73
    Участник

    @a80808 я немного о другой универсальности говорю 🙂

    1. возможность встраивать окно интерфейса, заложенного в RapidScada внутрь своего окна. Например мне нужно и окно Параметров и окно Настройки в дополнение к моему окну(окнам). Сейчас приходится вызывать как новое окно. Возможно нужно что-то сделать дополнительно, чтобы то же окно Параметров встроить в свое и у меня просто не получилось это сделать?

    2. не зависеть от количества и типов данных в окнах. Например в окне Параметров это строковой Словарь. Начинаешь плясать с бубном чтобы добавить другие типы, занимаешься преобразованием, или например надо, чтобы к ключу словаря были привязаны несколько переменных сразу. И вот тот же Xml в атрибутах позволяет хранить булевые false/true. Да, в самом файле это пишется текстом, но для программы это переменная bool если ее сериализовать.
    Причем переменные типа int я оставляю как строковые например для определенных целей, хотя там и int поддержан.

    #33000
    manjey73
    Участник

    @a80808 то есть когда мы пишем строго под определенную задачу, универсальность и не нужна. А когда делаем что-то по нескольку раз постоянно это трындец как отнимает время…

    Вот взять тот же интерфейс. Я посмотрел код mqtt, я там с бутылкой буду полгода разбираться, что к чему и как это окошко построить.
    Плюс посмотрел что мне сделал @JurasskPark, очень даже прикольно получилось, но опять же, нет универсальности, под каждый новый вариант надо перепиливать, да еще понимать, что ты там делаешь…
    Некоторые идеи просто вот запали 🙂

    Если проще. так как все конфигурационные файлы xml, почему бы не использовать его гибкость? Ты просто создаешь xml руками под конкретную задачу. Продумываешь структуру, названия переменных, количество веток и т.д.
    А потом просто в готовый код View пихаешь этот xml и получаешь готовый интерфейс при этом не перепиливая глобально код View.
    Вот чего хотелось бы добиться. Максимум, так это изменить набор картинок для веток дерева и указать какая картинка какой ветке драйвера будет принадлежать. Все.

    • Этот ответ был изменен 5 месяцев, 3 недели назад от manjey73.
    • Этот ответ был изменен 5 месяцев, 3 недели назад от manjey73.
    #33003
    Mikhail
    Модератор

    Сразу же возник вопрос — а если мне надо 3 ветки или больше? Это возможно добавить?
    Второй вопрос — вложенные ветки в те же Подписки/Команды возможны?

    Возможно. Поищите по исходникам модули и драйверы, в которых используется FrmModuleConfig, чтобы было больше примеров.

    Что-то такое хотите сделать? http://rustemsoft.com/images/xfoxmain.gif

    #33004
    manjey73
    Участник

    Да, что-то подобное, если можно так сказать.
    Суть сделать View часть полностью отвязанной от принципа логики самого драйвера с минимальной правкой в дальнейшем.
    И вариант запуска без правки вообще. То есть не назначать иконки веткам с проверкой что за ветка и как она привязана к самому драйверу, без создания выпадающих списков, если там не true/false — это все можно решить комментариями в самом xml файле.

    #33011
    Mikhail
    Модератор

    Интересная идея для продвинутых пользователей, которых не пугает XML.

    #33014
    manjey73
    Участник

    Так Xml там немного не будет пахнуть 🙂
    Речь немножко о другом. Пишется драйвер, где я для конфигурации продумываю атрибуты, текстовые поля, комментарии и т.д. в файле xml.
    Потом во View вставляю универсально заточенный код интерфейса под ЛЮБОЙ драйвер.
    И исходя из описания драйвера просто меняем переменные.

    То есть берем готовый шаблон, загружаем, меняем имя устройства, другие настройки, говорим сохранить Как и получаем новый xml файл конфигурации.

    Ну по сути ни чем не отличается от конфигуратора Modbus например или другого драйвера, только код будет заточен универсально. Добавление Комментариев будет из окна Администратора, а не прописано жестко в драйвере. В общем такой гибрид…

    Сейчас научился менять значения Атрибутов через DataGridView 🙂
    В общем еще потеть и потеть…..

    • Этот ответ был изменен 5 месяцев, 3 недели назад от manjey73.
    #33016
    manjey73
    Участник

    А уже чтобы не подсунуть чужой конфиг в определенный драйвер, наверное надо будет добавить атрибут, и по нему проверять. Или проще сделать вместо корня DevTemplate например IEC61107DeviceConfig и это имя прописать дополнительно во View. типа корень другой, значит шаблон от другого драйвера.

    Сейчас пока такой проверки нет, читаю любой xml, разбираюсь как менять значения и т.д….

    Главное, что я могу полностью прочитать дерево и сохранить его обратно. Правда с редактированием тоже сложности. Учитывая что параметры это атрибуты xml то их проще вытащить в DataGridView с привязкой и проще сделать событие на изменение ячейки.
    Чем делать через ListView и накладывать текстовое поле для редактирования.

    В общем смысл сделать универсальный такой мини редактор для конфигурации драйверов.

    • Этот ответ был изменен 5 месяцев, 3 недели назад от manjey73.
    • Этот ответ был изменен 5 месяцев, 3 недели назад от manjey73.
    #33081
    manjey73
    Участник

    Как победить TextChanged?

    Сейчас у меня используется это свойство, все вроде меняется, что требуется, но, это свойство вызывается каждое изменение буквы, а там происходит циклическая перезапись словарей.
    Использовать LostFocused не получается, окно вызывается внутри TabControl другого окна, соответственно выбранные Ноды уже другие.

    Может кто идею подскажет как что-то запустить один раз, после того как изменения уже произошли?

    #33083
    Mikhail
    Модератор

    Компонент TreeView?

    #33085
    manjey73
    Участник

    Да, я в TreeView в Tag сохраняю словари Атрибутов, Комментариев, Текста, CData из Xml файла.

    Потом в TabControl показываю все из SelectedNode и могу редактировать, потом надо обновлять после изменения словари в Tag чтобы все корректно отображалось.

    И получается если использовать TextChanged как есть, то обновления происходят каждую букву. А хотелось бы после потери фокуса например, но тогда уже будет другой SelectedNode, к тому же он же и измененный.

Просмотр 15 сообщений - с 16 по 30 (из 53 всего)
  • Вы должны авторизироваться для ответа в этой теме.