Модификаторы доступа для делегатов и событий должен быть установлен в «public».
public delegate void OnButtonClickedHandler();
public delegate void OnSelectionChangedHandler(string selectedvalue);
public event OnValueChangedHandler OnValueChanged;
public event OnButtonClickedHandler OnButtonClicked;
public event OnSelectionChangedHandler OnSelectionChanged;
Теперь события и соответствующие делегаты определены и добавлены, что позволяем нам начать их использовать.
Нам необходимо чтобы определенные события вызывались при изменении состояния элементов пользовательского интерфейса. Для этого нам необходимо подписаться на события соответствующих элементов пользовательского интерфейса. Чтобы это сделать добавим следующий код в конструктор SampleUI (после метода InitializeComponent()):
Теперь код конструктора SampleUI будет выглядет так:
А реализация событий так:
{
if (this.OnSelectionChanged != null)
{
string selectedValue = listBox1.SelectedItem.ToString();
this.OnSelectionChanged(selectedValue);
UpdateListView(string.Format("OnSelectionChanged({0}) event fired!", selectedValue));
}
}
void btnUpdateProperties_Click(object sender, EventArgs e)
{
this.StrProperty = txtStrProperty.Text;
int intValue;
if (int.TryParse(txtIntProperty.Text, out intValue))
this.IntProperty = intValue;
float floatValue;
if (float.TryParse(txtFloatProperty.Text, out floatValue))
this.FloatProperty = floatValue;
}
void btnClickEvent_Click(object sender, EventArgs e)
{
if (this.OnButtonClicked != null)
{
this.OnButtonClicked();
UpdateListView("OnButtonClicked event fired!");
}
}
Регистрация элемента управления ActiveX
Для того чтобы наш элемент управления ActiveX появился в системном списке элементов управления Windows, его необходимо зарегистрировать, процесс регистрации происходит путем добавления в системный реестр Windows определенных ключей. Это делается с помощью кода приведенного ниже.
Примечание: Наш элемент управления представляет собой .NET сборку, поэтому мы не может её зарегистрировать с помощью утилиты regsvr32.exe. Для регистрации .NET сборки необходимо использовать утилиту RegAsm.exe.
Код регистрации элемента управления ActiveX:
public static void RegisterClass(string key)
{
// Удаляем HKEY_CLASSES_ROOT\ из переданного ключа
StringBuilder sb = new StringBuilder(key);
sb.Replace(@"HKEY_CLASSES_ROOT\", "");
// Открываем ключ CLSID\{guid} в режиме записи
RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);
// Создаем ключ элемента управления ActiveX – это позволяет ему появиться
//в контейнере элемента управления ActiveX
RegistryKey ctrl = k.CreateSubKey("Control");
ctrl.Close();
// Создаем запись CodeBase
RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true);
inprocServer32.SetValue("CodeBase", Assembly.GetExecutingAssembly().CodeBase);
inprocServer32.Close();
// И в заключении закрываем ключ реестра
k.Close();
}
[ComUnregisterFunction()]
public static void UnregisterClass(string key)
{
StringBuilder sb = new StringBuilder(key);
sb.Replace(@"HKEY_CLASSES_ROOT\", "");
// Открываем ключ HKCR\CLSID\{guid} в режиме записи
RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);
// Удаляем ключ элемента управления ActiveX
k.DeleteSubKey("Control", false);
// Затем открываем ключ InprocServer32
RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true);
// Удаляем ключ CodeBase
k.DeleteSubKey("CodeBase", false);
// И в заключении закрываем ключ реестра
k.Close();
}
Делаем .NET сборку видимой
Рис. 7. Делаем .NET сборку видимой, шаг 1