Наследяването на форми позволява повторно използване на части от потребителския интерфейс. Чрез него е възможно да променим наведнъж общите части на много форми. За целта дефинираме една базова форма, която съдържа общата за всички наследници функционалност.
Базовата форма е най-обикновена форма. Единствената особеност е, че контролите, които могат да се променят от наследниците, се обявяват като protected. Виртуални методи могат да реализират специфичната за наследниците функционалност, достъпна от базовата форма.
При наследяване на форма се наследява класът на базовата форма. При това се указва името на пространството, в което е дефинирана базовата форма, следвано от точка и името на базовата форма. Във Visual Studio .NET формите наследници могат да се създават като от менюто се избере File | Add New Item… | Inherited Form.
При наследяването на форми можем да поставим базовата форма и формите-наследници в различни асемблита и след това да променяме всички форми-наследници, чрез промяната на единичен DLL файл.
Една особеност на VS.NET е, че по време на дизайн, промените, направени върху базовата форма, не се отразяват върху формите наследници, преди да бъде прекомпилирано приложението.
Наследяване на форми – пример
Настоящият пример илюстрира възможностите за наследяване на форми в Windows Forms, при което се наследяват всички контроли в тях, както и методите и свойствата на класа, в който са дефинирани.
В примера ще създадем четири форми:
-
MainForm – главната форма на приложението, която ще служи за показване на другите форми при натискане на съответния бутон.
-
BaseForm – базова форма, от която други форми наследяват потребителски интерфейс и базова функционалност.
-
AddressForm – форма за попълване на адрес, наследник на BaseForm.
-
ItemsDetailsForm - форма за попълване на описание на продукт, наследник на BaseForm.
Схематично наследяването между формите е показано на фигурата по-долу:
Ето и стъпките за изграждане на нашето приложение:
-
Стартираме VS.NET и създаваме нов Windows Forms проект.
-
Задаваме на главната форма име MainForm и заглавие "Main Form". Променяме и името на файла от Form1.cs на MainForm.cs.
-
Добавяме нова форма с име BaseForm. Това ще бъде нашата базова форма. От нея ще наследим останалите форми. В нея поставяме един Panel с име PanelMain и три бутона ButtonOK, ButtonCancel и ButtonReset. Дефинираме панела като protected, за да може да се променя от наследниците. Бутоните ButtonOK и ButtonCancel имат обичайното предназначение, което е зададено със свойствата AcceptButton и CancelButton на формата.
-
Добавяме обработчик на събитието Click на бутона ButtonReset. В него ще извикваме виртуалния метод ResetFormFields(), който трябва да се имплементира в наследниците и трябва да изтрива всички полета:
private void ButtonReset_Click(object sender,System.EventArgs e)
{
ResetFormFields();
}
| -
Добавяме и виртуалния метод ResetFormFields():
-
Компилираме приложението, за да се създаде асемблито, в което ще се съдържа формата, от която ще наследяваме. За целта избираме Build | Build Solution.
-
Добавяме първата форма-наследник. За целта избираме File | Add New Item… | Inherited Form. Въвеждаме за име на формата AddressForm и натискаме бутона open. От появилия се списък избираме BaseForm за компонент, от който ще наследяваме. Отваря се формата-наследник, която изглежда точно като базовата форма.
-
Променяме заглавието й на Address Form. Добавяме във формата един TextBox с име TextBoxAddress и две ComboBox контроли с имена ComboBoxTown и ComboBoxCountry. Задаваме на свойството Multiline на TextBoxAddress стойност true. За DropDownStyle на ComboBox контролите задаваме DropDownList. В колекцията Items на ComboBoxTowns въвеждаме няколко имена на български градове, а в тази на ComboBoxTowns въвеждаме "България".
-
Предефинираме метода ResetFormFields() така, че да изчиства полетата на формата:
protected override void ResetFormFields()
{
this.TextBoxAddress.Clear();
this.ComboBoxTown.SelectedIndex = -1;
this.ComboBoxCountry.SelectedIndex = -1;
}
| -
Добавяме втората форма-наследник. Задаваме ItemDetailsForm за име на формата. Променяме заглавието й на Item Details Form. Добавяме във формата две TextBox контроли с имена TextBoxName и TextBoxPrice, един ComboBox с име ComboBoxCategory и един CheckBox с име ChackBoxAvailability. За DropDownStyle на ComboBoxCategory задаваме DropDownList, а в колекцията Items въвеждаме няколко категории – "Алкохол", "Безалкохолни напитки", "Колбаси", "Стоки за бита". Задаваме на свойството Text на ChackBoxAvailability стойност "Наличност".
-
Предефинираме и в тази форма метода ResetFormFields() така, че да изчиства полетата:
protected override void ResetFormFields()
{
this.TextBoxName.Clear();
this.TextBoxPrice.Clear();
this.ComboBoxCategory.SelectedIndex = -1;
this.CheckBoxAvailability.Checked = false;
}
| -
Поставяме подходящи етикети на контролите във формите – например при TextBoxName поставяме етикет, чието свойство Text има стойност "Име на продукт:".
-
В главната форма добавяме два бутона с имена ButtonAddressForm и ButtonItemDetailsForm. В обработчиците на събитията Click на тези бутони ще показваме формите наследници:
private void ButtonAddressForm_Click(object sender,
System.EventArgs e)
{
AddressForm addressForm = new AddressForm();
addressForm.ShowDialog();
addressForm.Dispose();
}
private void ButtonItemDetailsForm_Click(object sender,
System.EventArgs e)
{
ItemDetailsForm itemDetailsForm = new ItemDetailsForm();
itemDetailsForm.ShowDialog();
itemDetailsForm.Dispose();
}
| -
Приложението е готово и можем да го стартираме и тестваме:
Сподели с приятели: |