|
Программирование >> Web ориентированные приложения
protected override void OnUnsubscribeControlEvents(Control control) base.OnSubscribeControlEvents(control); ((DateTimePicker)control).ValueChanged -= new EventHandler(ValueChanged); private void ValueChangedHandler (object sender, EventArgs e) if (ValueChanged != null) ValueChanged(this, e); Большая часть того, что делает этот класс - это показ избранных свойств, методов и событий класса DateTimePicker. Таким образом, ссылка на лежащий в основе элемент управления не должна будет поддерживаться приложением-хостом. Процесс показа событий несколько более сложен. Метод OnSubscribeControlEvents применяется для синхронизации событий размещенного элемента управления, в данном случае - DateTimePicker, с классом, происходящим от ToolStripControlHost, которым здесь является ToolStripDateTimePicker. В этом примере событие ValueChanged передается DTPickerToolStrip. Это дает возможность пользователю элемента управления так настроить событие в приложении-хосте, как если бы DTPickerToolStrip был наследником DateTimePicker вместо ToolStripControlHost. Следующий пример кода демонстрирует это. В коде использован DTPickerToolStrip. public mdiParent() DTPickerToolStrip otherDateTimePicker = new DTPickerToolStrip(); otherDateTimePicker.Width = 200; otherDateTimePicker.ValueChanged += new EventHandler(otherDateTimePicker ValueChanged); toolStrip1.Items.Add(otherDateTimePicker); Отметим, что когда устанавливается обработчик события ValueChanged, используется ссылка на класс DTPickerToolStrip вместо DateTimePicker, как в предыдущем примере. Видно, насколько яснее этот код выглядит по сравнению с предыдущим. Мало того, поскольку DateTimePicker помещен в оболочку другого класса, степень инкапсуляции значительно возросла, а DTPickerToolStrip стало гораздо проще использовать в других частях приложения и других проектах. MenuStrip Элемент управления MenuStrip - это контейнер для структур меню в приложении. Как упоминалось ранее, класс MenuStrip унаследован от ToolStrip. Система меню строится добавлением объектов ToolStripMenu к MenuStrip. Это можно сделать в коде или в дизайнере Visual Studio. Для этого нужно перетащить элемент управления MenuStrip на форму в дизайнере, и этот MenuStrip позволит вводить текст меню непосредственно в элементы меню. Элемент управления MenuStrip включает лишь пару дополнительных свойств. GripStyle использует перечисление ToolStripGripStyle для установки видимости. Свойство MdiWindowListItem принимает и возвращает ToolStripMenuItem. Этот ToolStripMenuItem будет представлять меню, которое отображают все открытые окна в MDI-приложении. ContextMenuStrip Класс ContextMenuStrip применяется для показа контекстного меню, или меню, отображаемого по нажатию правой кнопки мыши. Подобно MenuStrip, ContextMenuStrip является контейнером объектов ToolStripMenuItem. Однако он унаследован от ToolStripDropDownMenu. Элемент ContextMenuStrip создается так же, как MenuStrip. К нему добавляются элементы ToolStripMenuItem и определяются события Click каждого элемента для выполнения специфического действия. Контекстное меню назначается конкретному элементу управления. Это делается установкой свойства ContextMenuStrip элемента управления. Когда пользователь щелкает правой кнопкой мыши в поле элемента управления, отображается упомянутое меню. ToolStripMenuItem ToolStripMenuItem - класс, служащий для построения структур меню. Каждый объект ToolStripMenuItem представляет отдельный пункт в системе меню. Каждый ToolStripMenuItem владеет коллекцией ToolStripItemCollection, поддерживающей дочерние меню. Эта функциональность унаследована от ToolStripDropDownItem. Поскольку ToolStripMenuItem наследуется от ToolStripItem, к нему применимы все те же самые свойства форматирования. Изображения появляются как маленькие пиктограммы справа от текста меню. Элементы меню могут иметь флажки для отметки, находящиеся рядом с ними, определяемые с помощью свойств Checked и CheckState. Каждому пункту меню могут быть назначены горячие клавиши. Обычно это сочетание двух клавиш, как, например, <Ctrl+C> (обычное сокращение для операции копирования). Когда горячая клавиша назначена, она может быть необязательно отображена в меню установкой значения свойства ShowShortCutKey в true. Чтобы быть полезным, пункт меню должен что-то делать, когда пользователь щелкает на нем или нажимает сочетание горячих клавиш. Чаще всего для этого следует обработать событие Click. Если используется свойство Checked, то события CheckStateChanged и CheckedChanged могут применяться для определения изменения состояния метки. ToolStripManager Структуры меню и панелей инструментов могут вырасти до такого размера, что ими становится трудно управлять. Класс ToolStripManager предоставляет возможность создания маленьких, более управляемых фрагментов структур меню или панели инструментов с тем, чтобы потом при необходимости их комбинировать. Примером этого может служить форма, содержащая несколько элементов управления. Каждый из них должен отображать контекстное меню. Несколько пунктов меню должны быть доступны всем элементам управления, но каждый из них также содержит пару своих уникальных пунктов. Общие пункты меню могут быть определены в одном ContextMenuStrip. Каждый из уникальных пунктов меню может быть определен предварительно или создан во время выполнения. Для каждого элемента, которому требуется контекстное меню, общее меню клонируется, и к нему добавляются уникальные пункты с помощью метода ToolStripManager.Merge. Результирующее меню назначается свойству ContextMenuStrip элемента управления. ToolStripContainer Элемент управления ToolStripContainer используется для стыковки элементов управления, основанных на ToolStrip. Добавление ToolStripContainer и установка свойству Docked значения Fill добавляет ToolStripPanel к каждой стороне формы, а ToolStripContainerPanel - в середину формы. Любой ToolStrip (ToolStrip, MenuStrip или StatusStrip) может быть добавлен к любой из панелей ToolStripPanel. Пользователь может переместить ToolStrip с помощью мыши на любую сторону или в нижнюю часть формы. Установив значение false свойству Visible для любой из панелей ToolStripPanel, можно запретить помещение на панель ToolStrip. Панель ToolStripContainerPanel в центре формы может быть использована для размещения других элементов управления, которые ей понадобятся. Формы Ранее в этой главе уже было показано, как создавать простое Windows-приложение. Пример содержал один класс, унаследованный от System.Windows.Forms.Form. Согласно документации .NET Framework, форма - это представление любого окна в вашем приложении . Если у вас есть опыт разработки на Visual Basic, то термин форма вам должен быть знаком. Если же ваш опыт лежит в области C++ с применением MFC, то, вероятно, вы привыкли называть формы окнами, диалоговыми окнами или фреймами. Независимо от этого, можно сказать, что форма - это основное средство взаимодействия с пользователем. Ранее в этой главе уже раскрывались некоторые из наиболее часто используемых свойств, методов и событий класса Control, а поскольку класс Form является наследником Control, все те же методы, свойства и события присутствуют также в классе Form. Класс Form добавляет значительный объем функциональности к той, что обеспечена классом Control, и мы поговорим о ней в этом разделе. Класс Form Клиентские Windows-приложения могут содержать от одной до сотен различных форм. Формы могут быть основаны на SDI (Single Document Interface - однодокумент-ный интерфейс) или же на MDI (Multiple Document Interface - многодокументный интерфейс). Независимо от этого, сердцем Windows-клиента остается класс System. Windows.Forms.Form. Класс Form унаследован от ContainerControl, который, в свою очередь, унаследован от ScrollableControl - прямого потомка Control. Отсюда можно предположить, что форма может служить контейнером для других элементов управления, предоставлять возможность прокрутки содержимого, когда оно не умещается в клиентской области, а также обладать множеством тех же свойств, методов и событий, которые присущи другим элементам управления. Все это делает класс Form достаточно сложным. В данном разделе мы рассмотрим большую часть его функциональности. Создание и уничтожение экземпляра формы Важно хорошо понять процесс создания формы. То, что вы хотите сделать, зависит от того, где вы напишете инициализационный код. При создании экземпляра формы события происходят в следующем порядке: □ конструктор □ Load □ Activated □ Closing □ Closed □ Deactivate
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |