- Элементы управления Windows Forms Windows Forms controls
- В этом разделе In this section
- Связанные разделы Related sections
- Пошаговое руководство. Создание составного элемента управления с помощью C# Walkthrough: Author a Composite Control with C#
- Создание проекта Create the Project
- Создание библиотеки элементов управления ctlClockLib и элемента управления ctlClock To create the ctlClockLib control library and the ctlClock control
- Добавление элементов управления и компонентов Windows в составной элемент управления Add Windows Controls and Components to the Composite Control
- Добавление метки и таймера в составной элемент управления To add a Label and a Timer to your composite control
- Добавление свойств в составной элемент управления Add Properties to the Composite Control
- Добавление свойства в составной элемент управления To add a property to your composite control
- Тестирование элемента управления Test the Control
- Проверка элемента управления To test your control
- Наследование от составного элемента управления Inherit from a Composite Control
- Создание производного элемента управления To create the inherited control
- Добавление свойств оповещения Add the Alarm Properties
- Добавление свойств в составной элемент управления To add properties to your composite control
- Добавить в графический интерфейс элемента управления Add to the Graphical Interface of the Control
- Добавление элемента управления Label To add the label control
- Добавление функции будильника Add the Alarm Functionality
- Переопределение метода Timer1_Tick в ctlClock To override the timer1_Tick method of ctlClock
- Реализация метода отключения To implement the shutoff method
- Использование наследуемого элемента управления в форме Use the Inherited Control on a Form
- Сборка и добавление элемента управления в тестовую форму To build and add your control to a test form
Элементы управления Windows Forms Windows Forms controls
При проектировании и изменении пользовательского интерфейса приложений Windows Forms, вам потребуется добавлять, выравнивать и размещать элементы управления. As you design and modify the user interface of your Windows Forms applications, you will need to add, align, and position controls. Элементы управления — это объекты, содержащиеся в объектах форм. Controls are objects that are contained within form objects. Каждый тип элемента управления имеет собственный набор свойств, методов и событий для достижения определенной цели. Each type of control has its own set of properties, methods, and events that make it suitable for a particular purpose. Вы можете управлять элементами управления в конструкторе и писать код для динамического добавления элементов управления во время выполнения. You can manipulate controls in the designer and write code to add controls dynamically at run time.
В этом разделе In this section
Размещение элементов управления в формах Windows Forms Putting Controls on Windows Forms
Ссылки, связанные с размещением элементов управления в формах. Provides links related to putting controls on forms.
Упорядочение элементов управления в формах Windows Forms Arranging Controls on Windows Forms
Статьи, связанные с упорядочением элементов управления в формах. Articles related to arranging controls on forms.
Создание меток и назначение сочетаний клавиш для элементов управления Windows Forms Labeling Individual Windows Forms Controls and Providing Shortcuts to Them
Использование сочетаний клавиш, текстовых меток на элементах управления, а также клавиш-модификаторов. Describes the uses of keyboard shortcuts, text labels on controls, and modifier keys.
Элементы управления для использования в Windows Forms Controls to Use on Windows Forms
Список элементов управления, которые работают с Windows Forms, а также основные действия, которые можно выполнить с каждым элементом. Lists the controls that work with Windows Forms, and basic things you can accomplish with each control.
Разработка пользовательских элементов управления Windows Forms в .NET Framework Developing Custom Windows Forms Controls with the .NET Framework
Дополнительные сведения и образцы, которые помогут вам в разработке пользовательских элементов управления Windows Forms. Provides background information and samples to help users develop custom Windows Forms controls.
Создание элементов управления Windows Forms во время разработки Developing Windows Forms Controls at Design Time
Способы создания пользовательских элементов управления с помощью проектирования и наследования. Describes techniques for creating custom controls through design and inheritance.
Связанные разделы Related sections
Клиентские приложения Client Applications
Сведения о разработке приложений Windows. Provides an overview of developing Windows-based applications.
Пошаговое руководство. Создание составного элемента управления с помощью C# Walkthrough: Author a Composite Control with C#
Составные элементы управления предоставляют средства для создания и повторного использования настраиваемых графических интерфейсов. Composite controls provide a means by which custom graphical interfaces can be created and reused. Составной элемент управления — это компонент, имеющий визуальное представление. A composite control is essentially a component with a visual representation. Таким образом, он может состоять из одного или нескольких элементов управления, компонентов или блоков кода Windows Forms, позволяющих расширить функциональные возможности за счет проверки введенных пользователем данных, изменения свойств отображения или выполнения других предусмотренных разработчиком действий. As such, it might consist of one or more Windows Forms controls, components, or blocks of code that can extend functionality by validating user input, modifying display properties, or performing other tasks required by the author. Составные элементы управления можно вставлять в Windows Forms точно так же, как другие элементы управления. Composite controls can be placed on Windows Forms in the same manner as other controls. В первой части этого пошагового руководства мы создадим простой составной элемент управления с именем ctlClock . In the first part of this walkthrough, you create a simple composite control called ctlClock . Во второй части мы расширим функциональность ctlClock за счет наследования. In the second part of the walkthrough, you extend the functionality of ctlClock through inheritance.
Создание проекта Create the Project
Создавая проект, вы указываете для него имя, чтобы задать корневое пространство имен, имя сборки и имя проекта, и необходимо убедиться в том, что компонент по умолчанию попадет в нужное пространство имен. When you create a new project, you specify its name to set the root namespace, assembly name, and project name, and ensure that the default component will be in the correct namespace.
Создание библиотеки элементов управления ctlClockLib и элемента управления ctlClock To create the ctlClockLib control library and the ctlClock control
В Visual Studio создайте новый проект библиотеки элементов управления Windows Forms и назовите его ctlClockLib. In Visual Studio, create a new Windows Forms Control Library project, and name it ctlClockLib.
Имя проекта, ctlClockLib , по умолчанию также назначается корневому пространству имен. The project name, ctlClockLib , is also assigned to the root namespace by default. Корневое пространство имен используется для определения имен компонентов в сборке. The root namespace is used to qualify the names of components in the assembly. Например, если в двух сборках содержатся компоненты с именем ctlClock , можно указать компонент ctlClock , используя ctlClockLib.ctlClock. . For example, if two assemblies provide components named ctlClock , you can specify your ctlClock component using ctlClockLib.ctlClock.
В Обозреватель решений щелкните правой кнопкой мыши UserControl1.CS и выберите команду Переименовать. In Solution Explorer, right-click UserControl1.cs, and then click Rename. Измените имя файла на ctlClock.cs . Change the file name to ctlClock.cs . При появлении запроса на переименование всех ссылок на элемент кода «UserControl1» нажмите кнопку «Да «. Click the Yes button when you are asked if you want to rename all references to the code element «UserControl1».
По умолчанию составной элемент управления наследует от UserControl класса, предоставляемого системой. By default, a composite control inherits from the UserControl class provided by the system. UserControlКласс предоставляет функциональные возможности, необходимые для всех составных элементов управления, и реализует стандартные методы и свойства. The UserControl class provides functionality required by all composite controls, and implements standard methods and properties.
Сохраните проект, открыв меню Файл и выбрав пункт Сохранить все. On the File menu, click Save All to save the project.
Добавление элементов управления и компонентов Windows в составной элемент управления Add Windows Controls and Components to the Composite Control
Визуальный интерфейс представляет собой важную часть составного элемента управления. A visual interface is an essential part of your composite control. Он реализуется путем добавления одного или нескольких элементов управления Windows на поверхность конструктора. This visual interface is implemented by the addition of one or more Windows controls to the designer surface. В следующем примере мы добавим элементы управления Windows в составной элемент управления и напишем код для реализации функциональных возможностей. In the following demonstration, you will incorporate Windows controls into your composite control and write code to implement functionality.
Добавление метки и таймера в составной элемент управления To add a Label and a Timer to your composite control
В Обозреватель решений щелкните правой кнопкой мыши ctlClock.CS и выберите пункт Конструктор представлений. In Solution Explorer, right-click ctlClock.cs, and then click View Designer.
На панели элементов разверните узел Общие элементы управления , а затем дважды щелкните Метка. In the Toolbox, expand the Common Controls node, and then double-click Label.
LabelЭлемент управления с именем label1 добавляется к элементу управления в области конструктора. A Label control named label1 is added to your control on the designer surface.
В конструкторе щелкните элемент Label1. In the designer, click label1. В окне «Свойства» задайте следующие свойства. In the Properties window, set the following properties.
Свойство Property | Измените на Change to |
---|---|
ИмяName | lblDisplay |
ТекстText | (blank space) |
TextAlignTextAlign | MiddleCenter |
Font. sizeFont.Size | 14 |
На панели элементов разверните узел Компоненты, а затем дважды щелкните пункт Таймер. In the Toolbox, expand the Components node, and then double-click Timer.
Поскольку элемент Timer является компонентом, он не имеет визуального представления во время выполнения. Because a Timer is a component, it has no visual representation at run time. Поэтому он не отображается вместе с элементами управления в области конструктора, а в конструкторе компонентов (область в нижней части области конструктора). Therefore, it does not appear with the controls on the designer surface, but rather in the Component Designer (a tray at the bottom of the designer surface).
В конструкторе компонентов щелкните timer1, а затем присвойте Interval свойству значение 1000 , а Enabled свойству — значение true . In the Component Designer, click timer1, and then set the Interval property to 1000 and the Enabled property to true .
IntervalСвойство определяет частоту, с которой Timer компонент тикает. The Interval property controls the frequency with which the Timer component ticks. При каждом такте timer1 оно запускает код в событии timer1_Tick . Each time timer1 ticks, it runs the code in the timer1_Tick event. Интервал представляет время между тактами в миллисекундах. The interval represents the number of milliseconds between ticks.
В конструкторе компонентов дважды щелкните timer1 , чтобы открыть timer1_Tick событие для ctlClock . In the Component Designer, double-click timer1 to go to the timer1_Tick event for ctlClock .
Измените код, как показано в следующем примере. Modify the code so that it resembles the following code sample. Измените модификатор доступа с private на protected . Be sure to change the access modifier from private to protected .
Этот код вызывает отображение текущего времени в lblDisplay . This code will cause the current time to be shown in lblDisplay . Поскольку для интервала timer1 было задано значение 1000 , это событие возникает через каждую тысячу миллисекунд, а значит, текущее время обновляется каждую секунду. Because the interval of timer1 was set to 1000 , this event will occur every thousand milliseconds, thus updating the current time every second.
Измените метод, разрешив его переопределение с помощью ключевого слова virtual . Modify the method to be overridable with the virtual keyword. Дополнительные сведения см. ниже в разделе «Наследование из пользовательского элемента управления». For more information, see the «Inheriting from a User Control» section below.
Сохраните проект, открыв меню Файл и выбрав пункт Сохранить все. On the File menu, click Save All to save the project.
Добавление свойств в составной элемент управления Add Properties to the Composite Control
Элемент управления «Часы» теперь инкапсулирует Label элемент управления и Timer компонент, каждый из которых имеет собственный набор встроенных свойств. Your clock control now encapsulates a Label control and a Timer component, each with its own set of inherent properties. Несмотря на то что отдельные свойства этих элементов управления не будут доступны последующим пользователям вашего элемента управления, вы можете создать и предоставить настраиваемые свойства, написав соответствующие блоки кода. While the individual properties of these controls will not be accessible to subsequent users of your control, you can create and expose custom properties by writing the appropriate blocks of code. Выполняя следующую процедуру, вы добавите в элемент управления свойства, позволяющие пользователю изменять цвет фона и текста. In the following procedure, you will add properties to your control that enable the user to change the color of the background and text.
Добавление свойства в составной элемент управления To add a property to your composite control
В Обозреватель решений щелкните правой кнопкой мыши ctlClock.CS и выберите пункт Просмотреть код. In Solution Explorer, right-click ctlClock.cs, and then click View Code.
Откроется Редактор кода для элемента управления. The Code Editor for your control opens.
Найдите оператор public partial class ctlClock . Locate the public partial class ctlClock statement. Под открывающей скобкой ( <) введите следующий код. Beneath the opening brace ( <) , type the following code.
Эти операторы создают закрытые переменные для хранения значений свойств, которые вы собираетесь создать. These statements create the private variables that you will use to store the values for the properties you are about to create.
Введите или вставьте следующий код под объявлениями переменных из шага 2. Enter or paste the following code beneath the variable declarations from step 2.
Приведенный выше код обеспечивает доступ к двум настраиваемым свойствам, ClockForeColor и ClockBackColor , для последующих пользователей данного элемента управления. The preceding code makes two custom properties, ClockForeColor and ClockBackColor , available to subsequent users of this control. Операторы get и set позволяют хранить и извлекать значение свойства, а также предоставляют код для реализации соответствующих этому свойству функциональных возможностей. The get and set statements provide for storage and retrieval of the property value, as well as code to implement functionality appropriate to the property.
Сохраните проект, открыв меню Файл и выбрав пункт Сохранить все. On the File menu, click Save All to save the project.
Тестирование элемента управления Test the Control
Элементы управления не являются автономными приложениями и должны размещаться в контейнере. Controls are not stand-alone applications; they must be hosted in a container. Проверьте поведение элемента управления в среде выполнения и испытайте его свойства в тестовом контейнере пользовательских элементов управления. Test your control’s run-time behavior and exercise its properties with the UserControl Test Container. Дополнительные сведения см. в разделе как проверить поведение Run-Time UserControl. For more information, see How to: Test the Run-Time Behavior of a UserControl.
Проверка элемента управления To test your control
Нажмите клавишу F5 , чтобы выполнить сборку проекта и запустить элемент управления в тестовом контейнере UserControl. Press F5 to build the project and run your control in the UserControl Test Container.
В таблице свойств тестового контейнера выберите свойство ClockBackColor , а затем свойство, чтобы открыть палитру цветов. In the test container’s property grid, locate the ClockBackColor property, and then select the property to display the color palette.
Щелкните нужный цвет. Choose a color by clicking it.
Цвет фона элемента управления изменится на выбранный. The background color of your control changes to the color you selected.
Используя аналогичную последовательность событий, проверьте, функционирует ли свойство ClockForeColor должным образом. Use a similar sequence of events to verify that the ClockForeColor property is functioning as expected.
Из этого и предыдущих разделов вы узнали, как объединить компоненты и элементы управления Windows с кодом и упаковкой и, таким образом, предоставить настраиваемые функциональные возможности в виде составного элемента управления. In this section and the preceding sections, you have seen how components and Windows controls can be combined with code and packaging to provide custom functionality in the form of a composite control. Вы узнали, как вывести свойства в составной элемент управления и проверить элемент управления после того, как он будет готов. You have learned to expose properties in your composite control, and how to test your control after it is complete. В следующем разделе вы узнаете, как сконструировать производный составной элемент управления, используя в качестве базы ctlClock . In the next section you will learn how to construct an inherited composite control using ctlClock as a base.
Наследование от составного элемента управления Inherit from a Composite Control
В предыдущих разделах вы узнали, как объединить элементы управления, компоненты и код Windows в составные элементы управления, доступные для повторного использования. In the previous sections, you learned how to combine Windows controls, components, and code into reusable composite controls. После этого составной элемент управления можно использовать как базу, на основе которой будут создаваться другие элементы управления. Your composite control can now be used as a base upon which other controls can be built. Процесс создания класса, производного от базового, называется наследованием. The process of deriving a class from a base class is called inheritance. В этом разделе вы создадите составной элемент управления с именем ctlAlarmClock . In this section, you will create a composite control called ctlAlarmClock . Он будет производным от родительского элемента управления, ctlClock . This control will be derived from its parent control, ctlClock . Вы узнаете, как расширить функциональные возможности ctlClock , переопределив методы родительского класса и добавив новые методы и свойства. You will learn to extend the functionality of ctlClock by overriding parent methods and adding new methods and properties.
Первый шаг в создании производного элемента управления — это его наследование из родительского элемента. The first step in creating an inherited control is to derive it from its parent. Это действие создает новый элемент управления, обладающий всеми свойствами, методами и графическими характеристиками родительского элемента управления, а также может служить основой для добавления или изменения функциональных возможностей. This action creates a new control that has all of the properties, methods, and graphical characteristics of the parent control, but can also act as a base for the addition of new or modified functionality.
Создание производного элемента управления To create the inherited control
В Обозреватель решений щелкните правой кнопкой мыши ctlClockLib, наведите указатель на пункт Добавить и выберите пункт Пользовательский элемент управления. In Solution Explorer, right-click ctlClockLib, point to Add, and then click User Control.
Откроется диалоговое окно Добавление нового элемента. The Add New Item dialog box opens.
Выберите шаблон Производный пользовательский элемент управления. Select the Inherited User Control template.
В поле Имя введите ctlAlarmClock.cs и нажмите кнопку Добавить. In the Name box, type ctlAlarmClock.cs , and then click Add.
Откроется диалоговое окно Выбор компонентов для наследования. The Inheritance Picker dialog box appears.
В разделе Имя компонента дважды щелкните файл ctlClock. Under Component Name, double-click ctlClock.
В Обозреватель решений просмотрите текущие проекты. In Solution Explorer, browse through the current projects.
Файл с именем элемент ctlAlarmClock. cs будет добавлен в текущий проект. A file called ctlAlarmClock.cs has been added to the current project.
Добавление свойств оповещения Add the Alarm Properties
Свойства, добавляются в производный элемент управления точно так же, как в составной элемент управления. Properties are added to an inherited control in the same way they are added to a composite control. Теперь, используя синтаксис объявления свойств, добавим в элемент управления два свойства: свойство AlarmTime , в котором хранится значение даты и времени отключения будильника, и свойство AlarmSet , определяющее время срабатывания будильника. You will now use the property declaration syntax to add two properties to your control: AlarmTime , which will store the value of the date and time the alarm is to go off, and AlarmSet , which will indicate whether the alarm is set.
Добавление свойств в составной элемент управления To add properties to your composite control
В Обозреватель решений щелкните правой кнопкой мыши элемент ctlAlarmClock и выберите пункт Просмотреть код. In Solution Explorer, right-click ctlAlarmClock, and then click View Code.
Найдите оператор public class . Locate the public class statement. Обратите внимание, что элемент управления наследуется из ctlClockLib.ctlClock . Note that your control inherits from ctlClockLib.ctlClock . Под открывающей скобкой оператора ( <) введите следующий код. Beneath the opening brace ( <) statement, type the following code.
Добавить в графический интерфейс элемента управления Add to the Graphical Interface of the Control
Производный элемент управления получает такой же графический интерфейс, как у того элемента, из которого он наследуется. Your inherited control has a visual interface that is identical to the control it inherits from. Кроме того, он включает те же составные элементы управления, что и родительский элемент управления, однако свойства этих составных элементов будут доступны, только если предоставить их напрямую. It possesses the same constituent controls as its parent control, but the properties of the constituent controls will not be available unless they were specifically exposed. Графический интерфейс производного элемента управления добавляется точно так же, как и для любого составного элемента управления. You may add to the graphical interface of an inherited composite control in the same manner as you would add to any composite control. Чтобы продолжить добавление графического интерфейса для будильника, добавим элемент управления Label, который будет мигать при срабатывании будильника. To continue adding to your alarm clock’s visual interface, you will add a label control that will flash when the alarm is sounding.
Добавление элемента управления Label To add the label control
В Обозреватель решений щелкните правой кнопкой мыши элемент ctlAlarmClock и выберите пункт Конструктор представлений. In Solution Explorer, right-click ctlAlarmClock, and then click View Designer.
Конструктор для ctlAlarmClock откроется в главном окне. The designer for ctlAlarmClock opens in the main window.
Нажмите на отображаемую область элемента управления и просмотрите окно свойств. Click the display portion of the control, and view the Properties window.
Все свойства отображаются, но недоступны. While all the properties are displayed, they are dimmed. Это означает, что эти свойства являются собственными свойствами lblDisplay , в окне свойств изменить их или получить к ним доступ нельзя. This indicates that these properties are native to lblDisplay and cannot be modified or accessed in the Properties window. По умолчанию элементы управления, входящие в составной элемент управления, имеют статус private и их свойства недоступны. By default, controls contained in a composite control are private , and their properties are not accessible by any means.
Чтобы последующие пользователи составного элемента управления получили доступ к входящим в него элементам управления, объявите их как public или protected . If you want subsequent users of your composite control to have access to its internal controls, declare them as public or protected . Это позволит вам задавать и изменять свойства элементов управления в составном элементе управления, используя соответствующий код. This will allow you to set and modify properties of controls contained within your composite control by using the appropriate code.
Добавьте Label элемент управления в составной элемент управления. Add a Label control to your composite control.
С помощью мыши перетащите Label элемент управления непосредственно под полем. Using the mouse, drag the Label control immediately beneath the display box. В окне «Свойства» задайте следующие свойства. In the Properties window, set the following properties.
Свойство. Property | Параметр Setting |
---|---|
ИмяName | lblAlarm |
ТекстText | Уведомления!Alarm! |
TextAlignTextAlign | MiddleCenter |
VisibleVisible | false |
Добавление функции будильника Add the Alarm Functionality
Выполняя предыдущие процедуры, вы добавили свойства и элемент управления, которые обеспечат функциональность будильника в составном элементе управления. In the previous procedures, you added properties and a control that will enable alarm functionality in your composite control. В ходе этой процедуры вы добавите код, который будет сравнивать текущее время со временем будильника и, если они совпадают, запускать мигающее оповещение. In this procedure, you will add code to compare the current time to the alarm time and, if they are the same, to flash an alarm. Переопределив метод timer1_Tick в ctlClock и добавив в него дополнительный код, вы расширите возможности ctlAlarmClock , сохранив при этом все унаследованные функции ctlClock . By overriding the timer1_Tick method of ctlClock and adding additional code to it, you will extend the capability of ctlAlarmClock while retaining all of the inherent functionality of ctlClock .
Переопределение метода Timer1_Tick в ctlClock To override the timer1_Tick method of ctlClock
В редакторе кода найдите оператор private bool blnAlarmSet; . In the Code Editor, locate the private bool blnAlarmSet; statement. Сразу после него добавьте следующий оператор. Immediately beneath it, add the following statement.
В редакторе кода найдите закрывающую скобку ( >) в конце класса. In the Code Editor, locate the closing brace ( >) at the end of the class. Непосредственно перед скобкой добавьте следующий код. Just before the brace, add the following code.
Добавление этого кода решает сразу несколько задач. The addition of this code accomplishes several tasks. Оператор override указывает элементу управления использовать этот метод вместо метода, унаследованного из базового элемента управления. The override statement directs the control to use this method in place of the method that was inherited from the base control. При вызове этого метода он вызывает переопределяемый метод, используя оператор base.timer1_Tick , и следит за тем, чтобы в этом элементе управления были реализованы все функции исходного элемента управления. When this method is called, it calls the method it overrides by invoking the base.timer1_Tick statement, ensuring that all of the functionality incorporated in the original control is reproduced in this control. Затем он выполняет дополнительный код, реализующий функции будильника. It then runs additional code to incorporate the alarm functionality. Когда будильник срабатывает, появляется мигающая метка. A flashing label control will appear when the alarm occurs.
Элемент управления «Будильник» почти готов. Your alarm clock control is almost complete. Осталось реализовать только его отключение. The only thing that remains is to implement a way to turn it off. Для этого нужно добавить код в метод lblAlarm_Click . To do this, you will add code to the lblAlarm_Click method.
Реализация метода отключения To implement the shutoff method
В Обозреватель решений щелкните правой кнопкой мыши ctlAlarmClock.CS и выберите пункт Конструктор представлений. In Solution Explorer, right-click ctlAlarmClock.cs, and then click View Designer.
Откроется конструктор. The designer opens.
Добавьте кнопку в элемент управления. Add a button to the control. Задайте свойства для этой кнопки следующим образом. Set the properties of the button as follows.
Свойство Property | Значение Value |
---|---|
ИмяName | btnAlarmOff |
ТекстText | Отключить оповещениеDisable Alarm |
В конструкторе дважды щелкните элемент управления btnAlarmOff. In the designer, double-click btnAlarmOff.
Откроется редактор кода со строкой private void btnAlarmOff_Click . The Code Editor opens to the private void btnAlarmOff_Click line.
Измените метод, как показано в следующем коде. Modify this method so that it resembles the following code.
Сохраните проект, открыв меню Файл и выбрав пункт Сохранить все. On the File menu, click Save All to save the project.
Использование наследуемого элемента управления в форме Use the Inherited Control on a Form
Вы можете проверить наследуемый элемент управления так же, как вы протестировали элемент управления базового класса ctlClock : нажмите клавишу F5 , чтобы выполнить сборку проекта и запустить элемент управления в тестовом контейнере UserControl. You can test your inherited control the same way you tested the base class control, ctlClock : Press F5 to build the project and run your control in the UserControl Test Container. Дополнительные сведения см. в разделе как проверить поведение Run-Time UserControl. For more information, see How to: Test the Run-Time Behavior of a UserControl.
Чтобы элемент управления можно было использовать, необходимо поместить его в форму. To put your control to use, you will need to host it on a form. Производный составной элемент управления, как и стандартный, не может быть автономным и должен быть размещен в форме или другом контейнере. As with a standard composite control, an inherited composite control cannot stand alone and must be hosted in a form or other container. Поскольку ctlAlarmClock отличается более широкими функциональными возможностями, для его проверки требуется дополнительный код. Since ctlAlarmClock has a greater depth of functionality, additional code is required to test it. В ходе этой процедуры вы напишете простую программу для проверки функциональных возможностей ctlAlarmClock . In this procedure, you will write a simple program to test the functionality of ctlAlarmClock . Вы напишете код, задающий и отображающий свойство AlarmTime в ctlAlarmClock и проверяющий его унаследованные функции. You will write code to set and display the AlarmTime property of ctlAlarmClock , and will test its inherent functions.
Сборка и добавление элемента управления в тестовую форму To build and add your control to a test form
В Обозреватель решений щелкните правой кнопкой мыши ctlClockLib и выберите пункт Сборка. In Solution Explorer, right-click ctlClockLib, and then click Build.
Добавьте в решение новый проект приложения Windows Forms и назовите его Test. Add a new Windows Forms Application project to the solution, and name it Test.
В Обозреватель решений щелкните правой кнопкой мыши узел ссылки для тестового проекта. In Solution Explorer, right-click the References node for your test project. Щелкните Добавить ссылку, чтобы открыть диалоговое окно Добавление ссылки. Click Add Reference to display the Add Reference dialog box. Выберите вкладку Проекты. Click the tab labeled Projects. Проект ctlClockLib будет указан под полем Имя проекта. Your ctlClockLib project will be listed under Project Name. Дважды щелкните проект, чтобы добавить ссылку на тестовый проект. Double-click the project to add the reference to the test project.
В Обозреватель решений щелкните правой кнопкой мыши тест и выберите пункт Сборка. In Solution Explorer, right-click Test, and then click Build.
На панели элементов разверните узел Компоненты ctlClockLib. In the Toolbox, expand the ctlClockLib Components node.
Дважды щелкните ctlAlarmClock, чтобы добавить копию ctlAlarmClock в свою форму. Double-click ctlAlarmClock to add a copy of ctlAlarmClock to your form.
На панели элементов найдите и дважды щелкните элемент DateTimePicker , чтобы добавить его в DateTimePicker форму, а затем добавьте Label элемент управления, дважды щелкнув надпись. In the Toolbox, locate and double-click DateTimePicker to add a DateTimePicker control to your form, and then add a Label control by double-clicking Label.
С помощью мыши разместите элементы управления в удобном месте формы. Use the mouse to position the controls in a convenient place on the form.
Задайте свойства этих элементов управления следующим образом. Set the properties of these controls in the following manner.
Control Control | Property (Свойство) Property | Значение Value |
---|---|---|
label1 | ТекстText | (blank space) |
ИмяName | lblTest | |
dateTimePicker1 | ИмяName | dtpTest |
ФорматFormat | Time |
В конструкторе дважды щелкните dtpTest. In the designer, double-click dtpTest.
В редакторе кода откроется private void dtpTest_ValueChanged . The Code Editor opens to private void dtpTest_ValueChanged .
Измените код, как показано в следующем примере. Modify the code so that it resembles the following.
В Обозреватель решений щелкните правой кнопкой мыши тест и выберите пункт Назначить запускаемым проектом. In Solution Explorer, right-click Test, and then click Set as StartUp Project.
В меню Отладка щелкните Начать отладку. On the Debug menu, click Start Debugging.
Запустится тестовая программа. The test program starts. Обратите внимание, что текущее время обновляется в ctlAlarmClock элементе управления, а время начала отображается в DateTimePicker элементе управления. Note that the current time is updated in the ctlAlarmClock control, and that the starting time is shown in the DateTimePicker control.
Щелкните, DateTimePicker где отображаются минуты часа. Click the DateTimePicker where the minutes of the hour are displayed.
С помощью клавиатуры укажите значение минут, составляющее на одну минуту больше текущего времени, отображаемого ctlAlarmClock . Using the keyboard, set a value for minutes that is one minute greater than the current time shown by ctlAlarmClock .
Время включения будильника отображается в lblTest . The time for the alarm setting is shown in lblTest . Дождитесь момента, когда отображаемое время совпадет с установленным временем будильника. Wait for the displayed time to reach the alarm setting time. Когда это произойдет, lblAlarm начнет мигать. When the displayed time reaches the time to which the alarm is set, the lblAlarm will flash.
Отключите сигнал, нажав btnAlarmOff . Turn off the alarm by clicking btnAlarmOff . Теперь будильник можно сбросить. You may now reset the alarm.
В этой статье было рассмотрено несколько основных концепций. This article has covered a number of key concepts. Вы узнали, как создать составной элемент управления, объединив элементы управления и компоненты в контейнер составного элемента управления. You have learned to create a composite control by combining controls and components into a composite control container. Вы узнали, как добавить свойства в элемент управления и написать код для реализации настраиваемых функциональных возможностей. You have learned to add properties to your control, and to write code to implement custom functionality. В последнем разделе вы узнали, как расширять функциональные возможности заданного составного элемента управления с помощью наследования и как изменять функциональные возможности методов узла путем переопределения методов. In the last section, you learned to extend the functionality of a given composite control through inheritance, and to alter the functionality of host methods by overriding those methods.