загружаемой сборке. Создадим новый класс с именем TypeButton и добавим ссылку на пространство имен System.Windows.Forms.

using System;

using System.Windows.Forms;

Затем добавим код:

public class TypeButton System.Windows.Forms.Button {

 public Type _controlType;

 public TypeButton() {

 }

 // ControlType — получить или задать свойство ...

 public Type ControlType {

  get {

   return _controlType;

  }

  set {

   _controlType = value;

   this.Text = _controlType.FullName;

  }

 }

}

Как можно видеть, задавая свойство ControlType, мы изменяем текст кнопки, чтобы он стал полным названием типа.

Метод, который нужен для создания TypeButton, создает экземпляр элемента управления. Добавим этот метод, использующий System.Activator для создания экземпляра класса и преобразующий его в System.Windows.Forms.Control:

// CreateInstance — создание экземпляра типа данных ... 

public Control CreateInstance() {

 // возвращает экземпляр нового элемента управления ...

 return (Control)Activator.CreateInstance(ControlType);

}

Добавление кнопок

Для первого проверочного запуска добавим TypeButton, который представляет экземпляр элемента управления System.Windows.Forms.DataGrid. Это позволит протестировать логику того, что делается, не вдаваясь в дополнительные трудности, связанные с загрузкой сборки и просмотром типов данных.

Метод Form1.AddType будет получать объект System.Type и добавлять новый объект TypeButton в форму. Во-первых, необходимо создать экземпляр TypeButton и задать его свойство ControlType новым типом:

// AddType - добавить кнопку типа в компоновку ...

public void AddType(Type ControlType) {

 // первое: создать новую кнопку типа ...

 TypeButton button = new TypeButton();

 button.ControlType = ControlType;

Во-вторых, нужно добавить TypeButton в ArrayList, который содержит список кнопок:

 // второе: добавить эту кнопку в массив

 _buttons.Add(button);

После этого можно поместить в форму кнопку и добавить ее в список элементов управления формы:

 // теперь разместим кнопку

 button.Left = ButtonSpacing;

 button.Width = ButtonWidth;

 button.Top = _nextY;

 button.Height = ButtonHeight;

 // настроить следующее значение у ...

 _nextY += (ButtonHeight + ButtonSpacing);

 // вывести кнопку ...

 this.Controls.Add(button);

Наконец, необходимо присоединить событие click (нажатие) кнопки таким образом, чтобы мы могли иметь экземпляр элемента управления, который он представляет:

 // затем присоединяем обработчик события ...

 button.Click += new EventHandler(this.ButtonClick);

}

Пока еще мы не создали ButtonClick, — сделаем это сейчас:

// ButtonClick — вызывается всякий раз при нажатии кнопки ...

protected void ButtonClick(object sender, System.EventArgs e) {

 // преобразовать sender в кнопку типа ...

 TypeButton button = (TypeButton)sender;

Нашей первой задачей является преобразование sender в TypeButton. Это позволит использовать CreateInstance для создания элемента управления. Если мы уже имеем элемент управления, необходимо сначала удалить его из списка элементов управления формы:

// если уже имеется содержащийся элемент управления, удалим его ...

 if (_containedControl != null)

  Controls.Remove(_containedControl);

Создаем элемент управления:

 // создать экземпляр нового элемента управления...

 _containedControl = button.CreateInstance();

Наконец, мы можем поместить элемент управления в форму.

 // поместить элемент управления на форме ...

 _containedControl.Left = ButtonWidth + (3 * ButtonSpacing);

 _containedControl.Top = ButtonSpacing;

 _containedControl.Width = this.Width - _containedControl.Left - (4 * ButtonSpacing);

 _containedControl.Height = this.Height - (8 * ButtonSpacing);

 this.Controls.Add(_containedControl);

}

Тестирование полученного кода

Прежде чем можно будет увидеть окончательный вариант сделанного, необходимо добавить кнопку в форму. Используем элемент управления System Windows.Forms.DataGrid. Добавим следующий код в Form1:

private void Form1_Load(object sender, System.EventArgs e) {

 // при загрузке добавить тип кнопки ...

 DataGrid grid = new DataGrid();

 AddType(grid.GetType());

}

Теперь закончим проект. Нажав на кнопку System.Windows.Forms.DataGrid, увидим:

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату