Ватсон Карли
Шрифт:
foreach(Type testType in controlAssembly.GetTypes) {
Далее хитрость состоит том, чтобы создать экземпляр проверяемого типа данных, но преобразовать его в
Control
. Так как все это погружено в другой блок try…catch
, то при переходе к следующей строке мы знаем, что имеется полностью квалифицированный элемент управления. // попробуем создать экземпляр элемента управления
// и преобразовать его в элемент управления ...
try {
Control testControl = (Control)Activator.CreateInstance(testType);
Полезный совет.
System.Windows.Forms.Form
является производным от Control
, так как он использует контейнеризацию свойств Control
для вывода элементов управления, нарисованных в форме. Если проверить свойство TopLevelControl
, оно всегда будет задано при выводе класса из формы. // нам необходимо убедиться,
// что это не элемент управления "верхнего уровня" ...
if (testControl.TopLevelControl == null) {
// если мы здесь оказались, то это элемент управления ...
AddType(testType);
}
}
Мы можем завершить пример двумя обработчиками исключений:
catch {
// если мы здесь, мы не заботимся об объекте!
}
}
} catch(Exception ее) {
MessageBox.show("The assembly could not be loaded. " + ее.Message);
}
}
Прежде чем это проверить, необходимо поместить в проект другие элементы управления. Создадим первый класс, называемый
DemoTextBox
, и добавим следующее предложение наследования: public class DemoTextBox : System.Windows.Forms.TextBox
Теперь создадим другой класс, на этот раз с именем
DemoMonthCalendar
, и добавим следующее предложение: public class DemoMonthCalendar : System.Windows.Forms.MonthCalendar
Выполним проект. Должно получиться подобное изображение.
Заключение
Из этой статьи мы узнали, как динамически создавать элементы управления и добавлять их в форму. Мы ввели новый класс, производный от
System.Window.Forms.Button
, который позволяет добавлять дополнительною функциональность и свойства кнопке. Мы увидели также, как соединить с новыми элементами управления методы, вызываемые при инициировании событий. Наконец, мы проверили возможность просмотра сборки в поисках классов и использовали изученную технику для создания простой утилиты, которая загружается и выводит эти классы по команде пользователя.