Чаще всего, наследуемые формы создаются в режиме проектирования при выборе пункта меню Add Inherited Form. (Добраться до этого пункта можно двояко. Можно выбрать пункт Project/AddlnheritedForm из главного меню либо выбрать имя проекта в окне проекта и выбрать пункт Add/Add Inherited Form из контекстного меню, открывающегося при щелчке правой кнопкой.)
В результате открывается окно Inheritance Picker, в котором можно выбрать родительскую форму. Заметьте, родительская форма может принадлежать как текущему, так и любому другому проекту. Единственное ограничение — проект, содержащий родительскую форму, должен быть скомпилирован как ехе или dll. Вот как
Рис. 24.5.
При наследовании форм следует обратить внимание на модификаторы доступа элементов управления родительской формы. По умолчанию они имеют статус
Наследованную форму можно затем открыть в дизайнере форм, добавить в нее новые элементы и новые обработчики событий или изменить установки наследуемых элементов, если родительская форма предоставила такую возможность. (Хочу предупредить об одном возможном "жучке", связанном с наследованием форм. На одном из моих компьютеров установлена ОС Windows 2000, на другом — Windows ХР. Так вот, в Windows 2000 дизайнер отказывается открывать наследуемую форму, хотя она создается и нормально работает. Это происходит как для Visual Studio 2003, так и для beta2 Visual Studio 2005. В Office ХР все работает нормально. Не могу утверждать совершенно определенно, что это "жучок", поскольку не проводил тщательного исследования. Но полагаю, что предупредить о такой ситуации полезно.)
Два наследника формы TwoLists
Построим по указанной технологии двух наследников формы
Рис. 24.6.
Обратите внимание на значки, сопровождающие все наследуемые элементы управления. В классе
string[] source_items;
string[] selected_items;
const int max_items = 20;
В конструктор класса добавлен код, инициализирующий массивы:
source_items = new string[max_items];
selected_items = new string[max_items];
InitList1 ();
Вызываемый в конструкторе закрытый метод класса
void InitListl()
{
//задание элементов источника и инициализация списка формы
source_items[0] ="Бертран Мейер: Методы программирования";
//аналогично заполняются другие элементы массива
//перенос массива в список ListBox1
int i = 0;
while (source_items[i]!= null)
{
this.listBox1.Items.Add(source_items[i]); i++;
}
//this.listBox1.DataSource = source_items;
}
Закомментирована альтернативная возможность заполнения списка формы, использующая свойство