Уеб ориентирани приложения

защитена замяна void OnUnsubscribeControlEvents(Контрол контрол)

private void ValueChangedHandler(изпращач на обект, EventArgs e)

if (ValueChanged != null) ValueChanged(this, e);

Това позволява на потребителя на контролата да персонализира събитието в хост приложението, сякаш DTPickerToolStrip е DateTimePicker вместо ToolStripControlHost. Следният пример на код демонстрира това. Кодът използва DTPickerToolStrip.

DTPickerToolStrip otherDateTimePicker = нов DTPickerToolStrip(); otherDateTimePicker.Width = 200; otherDateTimePicker.ValueChanged +=

нов EventHandler(otherDateTimePicker ValueChanged);

Контролата MenuStrip е контейнер за структури от менюта в приложение. Както бе споменато по-рано, класът MenuStrip е извлечен от ToolStrip. Системата от менюта е изградена чрез добавяне на обекти ToolStripMenu към MenuStrip. Можете да направите това в код или в дизайнера на Visual Studio. За да направите това, плъзнете контрола MenuStrip върху формуляр в дизайнера и тази MenuStrip ще ви позволи да въвеждате текст на меню директно в елементите на менюто.

Контролата MenuStrip включва само няколко допълнителни свойства. GripStyle използва преброяването ToolStripGripStyle за задаване на видимост. Свойството MdiWindowListItem приема и връща ToolStripMenuItem. Този ToolStripMenuItem ще представлява менюто, което показват всички отворени прозорци в MDI приложение.

Класът ContextMenuStrip се използва за показване на контекстно меню или меню, което се показва при натискане на десния бутон на мишката. Подобно на MenuStrip, ContextMenuStrip е контейнер от обекти ToolStripMenuItem. Той обаче е наследен от ToolStripDropDownMenu. Елементът ContextMenuStrip се създава по същия начин като MenuStrip. Към него се добавят елементи.ToolStripMenuItem и дефинира събитията Click на всеки елемент за извършване на конкретно действие. Контекстното меню е присвоено на конкретен контрол. Това става чрез задаване на свойството ContextMenuStrip на контролата. Когато потребителят щракне с десния бутон в полето на контролата, се показва споменатото меню.

ToolStripMenuItem - клас, използван за изграждане на структури от менюта. Всеки обект ToolStripMenuItem представлява единичен елемент в системата от менюта.

Всеки ToolStripMenuItem притежава ToolStripItemCollection, която поддържа дъщерни менюта. Тази функционалност е наследена от ToolStripDropDownItem.

Тъй като ToolStripMenuItem наследява от ToolStripItem, за него се прилагат всички същите свойства за форматиране. Изображенията се показват като малки икони вдясно от текста на менюто. Елементите от менюто могат да имат квадратчета за отметка до тях, дефинирани чрез свойствата Checked и CheckState.

Бързи клавиши могат да бъдат присвоени на всеки елемент от менюто. Това обикновено е комбинация от два клавиша, като например (обичайното съкращение за операцията копиране). Когато е присвоен клавиш за бърз достъп, той може по желание да се покаже в менюто чрез задаване на свойството ShowShortCutKey на true.

За да бъде полезен, елемент от менюто трябва да прави нещо, когато потребителят щракне върху него или натисне клавишна комбинация. Най-често срещаният начин да направите това е да обработите събитието Click. Ако се използва свойството Checked, тогава събитията CheckStateChanged и CheckedChanged могат да се използват за откриване на промяна в състоянието на етикета.

Структурите на менютата и лентите с инструменти могат да нараснат до такъв размер, че да станат трудни за управление. Класът ToolStripManager предоставя възможност за създаване на по-малки, по-големиуправляеми фрагменти от структури на менюта или ленти с инструменти, така че по-късно да могат да бъдат комбинирани, ако е необходимо. Пример за това би бил формуляр, съдържащ множество контроли. Всеки от тях трябва да показва контекстно меню. Няколко елемента от менюто трябва да са достъпни за всички контроли, но всеки от тях също съдържа няколко уникални елемента. Общи елементи от менюто могат да бъдат дефинирани в един ContextMenuStrip. Всеки от уникалните елементи на менюто може да бъде предварително дефиниран или създаден по време на изпълнение. За всеки елемент, който изисква контекстно меню, общото меню се клонира и към него се добавят уникални елементи с помощта на метода ToolStripManager.Merge. Полученото меню се присвоява на свойството ContextMenuStrip на контролата.

Контролата ToolStripContainer се използва за закрепване на контроли, които са базирани на ToolStrip. Добавянето на ToolStripContainer и настройването на свойството Docked на Fill добавя ToolStripPanel към всяка страна на формуляра и ToolStripContainerPanel към средата на формуляра. Всеки ToolStrip (ToolStrip, MenuStrip или StatusStrip) може да бъде добавен към всеки от ToolStripPanels. Потребителят може да премести ToolStrip с мишката от двете страни или отдолу на формуляра. Като зададете свойството Visible на някой от ToolStripPanels на false, можете да предотвратите поставянето върху ToolStrip. ToolStripContainerPanel в центъра на формуляра може да се използва за хостване на други необходими контроли.

По-рано в тази глава ви показахме как да създадете просто приложение за Windows. Примерът съдържа един клас, който е наследен от System.Windows.Forms.Form. Според документацията на .NET Framework формулярът е представяне на всеки прозорец във вашияприложение. Ако имате опит в разработването на Visual Basic, тогава терминът форма трябва да ви е познат. Ако вашият опит е в C++ с помощта на MFC, тогава вероятно сте свикнали да извиквате формуляри прозорци, диалогови прозорци или рамки. Независимо от това, може да се каже, че формата е основното средство за взаимодействие с потребителя. По-рано в тази глава разгледахме някои от най-често използваните свойства, методи и събития на класа Control и тъй като класът Form наследява от Control, всички същите методи, свойства и събития присъстват и в класа Form. Класът Form добавя значително количество функционалност към предоставената от класа Control и ние ще говорим за това в този раздел.

Windows клиентските приложения могат да съдържат от една до стотици различни форми. Формулярите могат да бъдат базирани на SDI (интерфейс за един документ) или MDI (интерфейс за множество документи). Независимо от това, сърцето на клиента на Windows остава системата. Windows.Forms.Form. Класът Form е извлечен от ContainerControl, който от своя страна е извлечен от ScrollableControl, който е пряк наследник на Control. Това предполага, че даден формуляр може да служи като контейнер за други контроли, да предоставя възможност за превъртане на съдържание, когато не се побира в клиентската област, и да има много от същите свойства, методи и събития, които са присъщи на други контроли. Всичко това прави класа Form доста сложен. В този раздел ще разгледаме по-голямата част от неговата функционалност.

Създаване и унищожаване на екземпляр на формуляр

Важно е да разберете добре процеса на създаване на формуляр. Какво искате да направите зависи от това къде пишете кода за инициализация. Докато създаватеекземплярът на формата за събитие се появява в следния ред: