![]() |
#101
|
|||
|
|||
![]() Добрый день!
К сожалению предыдущий способ сильно зависит от самого файла семантики, фактически Вы опираетесь на его внутренние данные. Посмотреть какие именно handle соответствуют какому узлу, можно просто открыв в текстовом редакторе файл семантики, например, оперируя данными из файла Semantic.xml <Item Caption="Канализация" Handle="1017"> <Propertys aType="0"> <Property ClassName="0" Caption="Вид" Handle="1"> <Items aType="0"> <Item Caption="Наземная" Handle="2"> <Propertys aType="0"> <Property ClassName="0" Caption="Тип" Handle="4"> <Items aType="0"> <Item Caption="Без подразделений" Handle="5"> <Propertys aType="0"> <Property ClassName="0" Caption="Подписывать буквенный индекс" Handle="22"> <Items aType="0"> <Item Caption="Да" Handle="39"> Таким образом код, в приведённом примере делает следующее: Поскольку в SemanticDataSet структурной линии уже содержит корневой узел с handle 1017 То вызвав запрос элемента с handle = 1 мы получим значение свойства "Вид" Поскольку это SemanticJumper, то его значением является handle выбранного подэлемента. selected_handle = semantic[semantic[1]] Метод semantic.Root.TryGetNode позволяет получить семантический узел по его коду if (semantic.Root.TryGetNode(selected_handle, ref)): ConsoleListner.Current.WriteLine(ref.Value.Caption ) Здесь мы проверяем, что работаем непосредственно с узлом handle = 2 - то есть с Наземной канализацией if (selected_handle == 2): Теперь нам необходимо определить Тип, для этого у Наземной линии мы запрашиваем узел с handle = 4 selected_handle = semantic[semantic[4]] Снова получаем семантический узел по его коду и выводим его наименование if (semantic.Root.TryGetNode(selected_handle, ref)): ConsoleListner.Current.WriteLine(ref.Value.Caption ) Для того чтобы получить Подписывать буквенный индекс значение свойства мы проверяем hanlde типа sign_index = False Если это тип Без подразделений, то Подписывать буквенный индекс стоит в значении Да, если значение handle равно 39 if (selected_handle == 5): sign_index = semantic[semantic[22]] == 39 Этот метод работы достаточно трудоёмок и имеет ряд существенных недостатков - первое, он чуствителен к содержимому файла семантики, что было нами успешно продемонстрированно в предыдущем примере. Поскольку там использовался нестандартный файл семантики и handle внутри файла отличались, от системных для версии 8.x К достоинствам метода можно отнести тот факт, что Вы имеете возможность опредлять значения всех свойств, включая скрытые. В принципе для решения Вашего вопроса, действительно можно вызвать функцию GetVisibleProperties() у LinearSemantic и определять Ваши значения по визуальному представлению свойств. Если Вы создаёте свой собственный объект, и Вам нужно опираться на какие-либо определённые свойства, то рекомендую прописывать для них свойство Tag, и обращатся к значению свойства по этому тэгу. |
Навигация по основному сайту |
Главная | Каталог продуктов и услуг | Где купить | Сопровождение |
Вакансии | О компании | Обзоры | Канал на YouTube |