Создание элемента управления ActiveX для SCADA Vijeo Citect с помощью Microsoft Visual C# 2012

Чтобы свойства и методы предоставляемые интерфейсом стали доступны для приложений, необходимо добавить к определению интерфейса модификатор доступа «public», как показано ниже.

public interface IMyFirstActiveX

Давайте определим для нашего интерфейса следующие свойства и методы:

  • Свойства:
    • Имя: StrProperty Тип данных: string
    • Имя: IntProperty Тип данных: int
    • Имя: FloatProperty Тип данных: float
  • Методы:
    • SampeMethod ()
    • SampleMethodWithArgs (string arg1)

При определении свойств и методов интерфейса необходимо использовать атрибут [DispId(n)], который должен быть уникальным в его пределах. Итак, вот что у нас должно получиться:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

namespace MyFirstActiveX
{
    [ComVisible(true)]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    [Guid("281206BC-9115-44D8-95F9-D9EF76EE27C2")]

    public interface IMyFirstActiveX
    {
        #region Properties
        // Здесь определяем предоставляемые элементом управления ActiveX...

        [DispId(1)]
        string StrProperty { get; set; }

        [DispId(2)]
        int IntProperty { get; set; }

        [DispId(3)]
        float FloatProperty { get; set; }

        #endregion

        #region Methods
        // Здесь определяем предоставляемые элементом управления ActiveX методы...

        [DispId(4)]
        void SampleMethod();

        [DispId(5)]
        void SampleMethodWithArgs(string arg1);

        #endregion
    }
}

Определение событий

Элементы управления ActiveX могут иметь события. Предоставление событий клиентам позволяем последним подписаться на них и получать извещения об их возникновении. Для того сделать доступным подписку на события нашего элемента управления ActiveX, нам необходимо добавить интерфейс, аналогичный интерфейсу свойств и методов. В это раз, мы дадим нашему интерфейсу имя IMyFirstActiveXEvents.

Как уже упоминалось ранее, при создании интерфейса свойств и методов мы должны:

  • Задать следующие атрибуты для интерфейса:
    • [ComVisible(true)]
    • [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    • [Guid("56DA4D66-EED8-4C22-A81E-47C435B43F51")]
  • Установить модификатор доступа для интерфейса как «public»
  • Задать каждому событию уникальный атрибут [DispId(n)]

В нашем случае мы определим следующие события:

  • OnValueChanged  //Возникает когда изменилось значение свойства 
  • OnSelectionChanged //Возникает когда выбирается другой элемент
  • OnButtonClicked //Возникает когда щелкнули по кнопке

Вот код получившегося интерфейса событий:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;

    [ComVisible(true)]
    [InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    [Guid("56DA4D66-EED8-4C22-A81E-47C435B43F51")]

    public interface IMyFirstActiveXEvents
    {
        [DispId(1)]
        void OnValueChanged(string propertyname);

        [DispId(2)]
        void OnSelectionChanged(string selectedvalue);

        [DispId(3)]
        void OnButtonClicked();
    }

Пользовательский интерфейс

Теперь, когда мы определились со свойствами, методами и событиями элемента управления ActiveX, которые он будет предоставлять приложениям, давайте создадим пользовательский интерфейс для него.

Мы будет использовать пользовательский интерфейс для отображения и изменения значений свойств элемента управления ActiveX, инициирования возникновения событий, а также индикации когда методы вызываются клиентом.

Итак, добавим новый элемент в проект, используя шаблон Пользовательский элемент управления (User Control). Присвоим ему имя «SampleUI», как показано на рис. 5.

Добавление в проект на Visual Studio 2012 пользовательского элемента управления

Рис. 5. Добавление в проект на Visual Studio 2012 пользовательского элемента управления?

Пользовательский интерфейс будет состоять из следующих элементов управления:

  • Listbox
    • Name: listBox1
    • Items:
      • Элемент 1
      • Элемент 2
      • Элемент 3
      • Элемент 4
      • Элемент 5
  • Groupbox
    • 3 x Labels
      • Name: label1; Text: Свойство Str:
      • Name: label2; Text: Свойство Int:
      • Name: label3; Text: Свойство Float:
    • 3 x Textbox
      • Name: txtStrProperty
      • Name: txtIntProperty
      • Name: txtFloatProperty
    • 1 x Button:
      • Name: btnUpdateProperties
      • Text: Обновить свойства
  • Button
    • Name: btnClickEvent
    • Text: Инициировать событие OnButtonClick
  • ListView
    • Name: listView1
    • Columns:
      • Name: TimeStamp; Text: Метка времени
      • Name: Details; Text: Сообщение

Страницы

Теги: