<< Click to Display Table of Contents >> Navigation: Проект > Элементы дерева объектов > Палитра ФБ > Служебные > Скрипт > Руководство и примеры > Работа с трендами > Управление видимостью перьев |
Можно включать и отключать видимость перьев добавленных на тренд. Для этого есть специальный флаг в легенде и минилегенде:
Иногда может потребоваться управлять видимостью извне по алгоритму - например, при смене режимов работы установки, когда некоторые параметры в данный момент не нужны. Данную задачу также можно автоматизировать с помощью скрипта.
Сделаем заготовку - в объект добавим три значения, которые будут параметрами добавляемыми на тренд, именно их и мы и будем скрывать. Три команды для управления видимостью, и кнопки с фиксацией, а одна кнопка для применения выбора.
Заготовка скрипта - аналогичная.
Для того чтобы обращаться к перу, сначала необходимо получить их список. Для этого нужно воспользоваться методом:
var list = trend.Settings.Objects.OfType<MasterSCADA.Graph.Objects.Graph2D>().ToList();
Получившаяся переменная list - это коллекция List, с которой можно работать используя циклы for, while, foreach или обращаться к элементам по индексам. У каждого пера есть набор свойств, за видимость пера отвечает свойство Visible.
Для примера сделаем простейший вариант - будет обращаться по индексу к нашей коллекции и изменять свойство видимости.
//получаем коллекцию перьев
var list = trend.Settings.Objects.OfType<MasterSCADA.Graph.Objects.Graph2D>().ToList();
//далее поиск по номеру
//получаем нулевое перо
var param = list[0];
//скрыть видимость параметра тренда
param.Visible = Видимость_пера_0.Value;
//получаем первое перо
param = list[1];
//скрыть видимость параметра тренда
param.Visible = Видимость_пера_1.Value;
//получаем второе перо
param = list[2];
//скрыть видимость параметра тренда
param.Visible = Видимость_пера_2.Value;
Можно еще проще:
//получаем коллекцию перьев
var list = trend.Settings.Objects.OfType<MasterSCADA.Graph.Objects.Graph2D>().ToList();
//далее по номеру
list[0].Visible = Видимость_пера_0.Value;
list[1].Visible = Видимость_пера_1.Value;
list[2].Visible = Видимость_пера_2.Value;
Итоговый код будет выглядеть так:
public override void Execute()
{
if (Применить == true && M == false)
{
//Ссылка на текущий проект
var Project = HostFB.TreeItemHlp.Project;
//получаем корневой объект
var ParentObject = (ITreeItemHlp)HostFB.TreeItemHlp.Parent;
//получаем тренд
RTManager.Instance.ThreadHolder.BeginInvoke(new ThreadStart(delegate
{
foreach (Trend trend in Project.GetService<TrendService>().Opened)
{
var host = trend.Host as System.Windows.Forms.Control;
if (host != null)
{
Object name = WinFormsControlBase.GetAmbientProperty(host, WindowlessControlBase.DISPID.DISPID_AMBIENT_NAME);
if (name.ToString() != ИМЯ_ТРЕНДА || trend.Attribute.TreeItem.ID != ParentObject.ID || trend.Attribute.DisplayName != ИМЯ_ОКНА) continue;
//получаем коллекцию перьев
var list = trend.Settings.Objects.OfType<MasterSCADA.Graph.Objects.Graph2D>().ToList();
//далее поиск по номеру
//получаем нулевое перо
var param = list[0];
//скрыть видимость параметра тренда
param.Visible = Видимость_пера_0.Value;
//получаем первое перо
param = list[1];
//скрыть видимость параметра тренда
param.Visible = Видимость_пера_1.Value;
//получаем второе перо
param = list[2];
//скрыть видимость параметра тренда
param.Visible = Видимость_пера_2.Value;
}
}
}));
}
M = Применить;
}
Проверим работу в режиме исполнения:
Готовый пример можно скачать по ссылке.