Цель работы: Изучить основные элементы управления Windows -форм, их свойства и методы, а также получить практические навыки в разработке Windows -форм с элементами контроля
Классы, представляющие графические элементы управления, находятся в пространстве имен System.Windows.Forms. С их помощью обеспечивается реакция на действия пользователя в приложении Windows Forms. Классы элементов управления связаны между собой достаточно сложными отношениями наследования. Общая схема таких отношений представлена на рисунке 7.1.
Класс Control, как общий предок, обеспечивает все производные классы общим набором важнейших возможностей. В числе этих возможностей можно перечислить события мыши и клавиатуры, физические размеры и местонахождение элемента управления (свойства Height, Width, Left, Right, Location ), установку цвета фона и цвета переднего плана, выбор шрифта и т.п.
При создании приложения можно добавить элементы управления на форму при помощи графических средств Visual Studio. Обычно достаточно выбрать нужный элемент управления в окне ToolBox и поместить его на форме. Visual Studio автоматически сгенерирует нужный код для формы. После этого можно изменить название элемента управления на более содержательное (например, вместо button1, предлагаемого по умолчанию, - buttonPrimer ) Visual Studio позволяет не только размещать на форме элементы управления, но и настраивать их свойства. Для этого достаточно щелкнуть на элементе управления правой кнопкой мыши и в контекстном меню выбрать Properties (Свойства).
(рис 7.1) Иерархия элементов управления Windows FormsВсе изменения, которые необходимо произвести в открывшемся окне (рисунок 7.2), будут добавлены в код метода InitializeComponents().

То же самое окно позволяет настроить не только свойства данного элемента управления, но и обработку событий этого элемента. Перейти в список событий можно при помощи кнопки
(рис 7.2) в закладке Properties (рисунок 7.3). Можно выбрать в списке нужное событие и рядом с ним сделать двойной щелчок или ввести имя метода или выбрать метод из списка.
(рис 7.3) Настройка обработчиков событийПосле задания имени метода или двойного щелчка Visual Studio сгенерирует заготовку для обработчика события.
Рассмотрим основные элементы управления Windows -форм.
Элемент управления TextBox (текстовое окно) предназначен для хранения текста (одной или нескольких строк). При желании текст в TextBox может быть настроен как "только для чтения", а в правой и нижней части можно поместить полосы прокрутки.
Класс TextBox происходит непосредственно от класса TextBoxBase, обеспечивает общими возможностями как TextBox, так и RichTextBox. Свойства, определенные в TextBoxBase, представлены в таблице 7.1.
| Свойство | Назначение |
|---|---|
AcceptsTab |
Определяет, что будет производиться при нажатии на клавишу Tab: вставка символа табуляции в само поле или переход к другому элементу управления |
AutoSize |
Определяет, будет ли элемент управления автоматически изменять размер при изменении шрифта на нем |
BackColor, ForeColor |
Позволяют получить или установить значение цвета фона и переднего плана |
HideSelection |
Позволяет получить или установить значение, определяющее, будет ли текст в TextBox оставаться выделенным после того, как этот элемент управления будет выведен из фокуса |
MaxLength |
Определяет максимальное количество символов, которое можно будет ввести в TextBox |
Modified |
Позволяет получить или установить значение, определяющее, был ли текст в TextBox изменен пользователем |
Multiline |
Указывает, может ли TextBox содержать несколько строк текста |
Readonly |
Помечает TextBox как "только для чтения" |
SelectedText, SelectionLength |
Содержат выделенный текст (или определенное количество символов) в TextBox |
SelectionStart |
Позволяет получить начало выделенного текста в TextBox |
|
Определяет, будет ли текст в TextBox автоматически переноситься на новую строку при достижении предельной длины строки |
В TextBoxBase также определено множество методов: для работы с буфером обмена ( Cut, Copy и Paste ), отменой ввода ( Undo ) и прочими возможностями редактирования ( Clear, AppendText и т. п.).
Из всех событий, определенных в TextBoxBase, наибольший интерес представляет событие TextChange. Это событие происходит при изменении текста в объекте класса, производном от TextBoxBase. Например, его можно использовать для
Свойства, унаследованные от Control и от TextBoxBase, определяют большую часть возможностей TextBox. Свойств, определенных непосредственно в классе TextBox, не так уж и много. Они представлены в таблице 7.2.
| Свойство | Назначение |
|---|---|
AcceptsReturn |
Позволяет определить, что происходит, когда пользователь при вводе текста нажал на Enter. Варианта два: либо в TextBox начинается новая строка текста, либо активизируется кнопка по умолчанию на форме |
CharacterCasing |
Позволяет получить или установить значение, определяющее, будет ли изменяться регистр вводимых пользователем символов |
PasswordChar |
Позволяет выбрать символ, используемый для отображения вводимых пользователем данных (в поле для ввода пароля) |
ScrollBars |
Позволяет получить или установить значение, определяющее, будут ли в TextBox с несколькими строками присутствовать полосы прокрутки |
TextAlign |
Позволяет определить выравнивание текста в TextBox (используются значения из перечисления HorizontalAlignment ) |
Значения перечисления HorizontalAlignment представлены в таблице 7.3.
| Значение | Описание |
|---|---|
Center |
Выравнивание по центру |
Left |
Выравнивание по левому краю |
Right |
Выравнивание по правому краю |
Кнопка ( button ) - это самый простой из всех элементов управления и при этом наиболее часто используемый. Можно сказать, что кнопка - это возможность принять ввод (щелчок кнопкой мыши или набор на клавиатуре) наиболее простым способом. Непосредственный предок класса System.Windows.FormButton в иерархии классов .NET - это класс ButtonBase, обеспечивающий общие возможности для целой группы производных от него элементов управления (таких как Button, CheckBox и RadioButton ). Некоторые свойства ButtonBase представлены в таблице 7.4.
| Свойство | Назначение |
|---|---|
FlatStyle |
Позволяет настроить "рельефность" кнопки. Используются значения из перечисления FlatStyle |
Image |
Позволяет задать изображение, которое будет выводиться на кнопке (при этом можно указать точное местонахождение изображения). Фоновый рисунок лучше настраивать при помощи свойства BackgroundImage, определенного в базовом классе Control |
ImageAlign |
Позволяет определить выравнивание изображения, размещенного на кнопке. Используются значения из перечисления ContentAlignment |
Imagelndex, ImageList |
Эти свойства используются для работы с набором изображений (объектом ImageList ), выводимых на кнопке |
IsDefault |
Определяет, будет ли эта кнопка являться кнопкой по умолчанию (то есть срабатывать при нажатии на Enter ) |
TextAlign |
Позволяет получить или установить выравнивание текста на кнопке. Также используются значения из перечисления ContentAlignment |
Сам класс Button не определяет каких-либо дополнительных возможностей помимо унаследованных от ButtonBase, за единственным, но существенным исключением свойства DialogResult. Это свойство позволяет возвращать значение при закрытии диалогового окна, например, при нажатии кнопок ОК или Cancel (Отменить).
В подавляющем большинстве случаев выравнивание текста, размещенного на кнопке, производится по центру, так что текст будет размещен строго посередине кнопки. Однако если нам по каким-то причинам необходимо использовать другой стиль выравнивания, в нашем распоряжении - свойство TextAlign, определенное в классе ButtonBase. Для TextAlign используются значения из перечисления ContentAlignment (таблица 7.5). Значения из того же перечисления используются и для определения положения изображения на кнопке.
| Значение | Описание (выравнивание) |
|---|---|
BottomCenter |
По нижнему краю кнопки, относительно боковых краев - посередине |
BottomLeft |
Но нижнему краю кнопки, слева |
BottomRight |
По нижнему краю кнопки, справа |
MiddleCenter |
По центру кнопки |
MiddleLeft |
Относительно верхнего и нижнего краев - по центру, относительно боковых краев - слева |
MiddleRight |
Относительно верхнего и нижнего краев - по центру, относительно боковых краев - справа |
TopCenter |
По верхнему краю кнопки, относительно боковых краев - посередине |
TopLeft |
По верхнему краю кнопки, слева |
TopRight |
По верхнему краю кнопки, справа |
Для флажка (тип CheckBox ) предусмотрено три возможных состояния. Как и тип Button, CheckBox наследует большую часть своих возможностей от базовых классов Control и ButtonBase. Однако в этом классе существуют и свои собственные члены, обеспечивающие дополнительные уникальные возможности. Наиболее важные свойства CheckBox представлены в таблице 7.6.
| Свойство | Назначение |
|---|---|
Appearance |
Настраивает вид флажка. Для этого свойства используются значения из перечисления Appearance |
AutoCheck |
Позволяет получить или установить значение, определяющее, будут ли значения Checked и CheckState, а также внешний вид флажка автоматически изменяться при щелчке на нем |
CheckAlign |
Позволяет установить горизонтальное и вертикальное выравнивание собственно флажка (квадратика) в элементе управления CheckBox. Используются значения из перечисления ContentAlignment |
Checked |
Возвращает значение типа bool, представляющее текущее состояние флажка (выбран или не выбран) Если для свойства ThreeState установлено значение true, то свойство Checked будет возвращать true как для явно выбранного флажка, так и для того флажка, для которого установлено значение "не определено" ( ) |
CheckState |
Позволяет получить или установить значение флажка (установлен - не установлен - не определено), используя не true и false, как в Checked, а три значения из перечисления CheckState. Обычно используется, если свойство ThreeState для флажка имеет значение true (то есть он допускает три значения). |
ThreeState |
Определяет, будут ли для флажка использоваться три значения (из перечисления CheckState ) или только два |
Возможные состояния флажка ( можно использовать только тогда, когда для свойства ThreeState установлено значение true ) представлены в таблице 7.7.
| Значение | Описание |
|---|---|
Checked |
Флажок установлен |
|
Значение не определено (обычно флажок выглядит как "серый", затененный) |
Unchecked |
Флажок снят |
Состояние "значение не определено" ( ) может быть установлено, например, для верхнего элемента иерархии, в которой для одной части подчиненных элементов флажок установлен, а для другой - снят.
Тип RadioButton (переключатель) можно воспринимать, как несколько видоизмененный флажок при этом сходство между этими типами подчеркивается почти полным совпадением наборов членов. Между типами RadioButton и CheckBox существуют лишь два важных различия: в RadioButton предусмотрено событие CheckedChanged (возникающее при изменении значения Checked ), а кроме того, RadioButton не поддерживает свойство ThreeState и не может принимать состояние (не определено).
Переключатели всегда используются в группах, которые рассматриваются как некое единое целое. Внутри группы переключателей одновременно может быть выбран только один переключатель. Для группировки переключателей в группы используется тип GroupBox.
И флажок ( CheckBox ), и переключатель ( RadioButton ) поддерживают свойство Checked, при помощи которого очень удобно получать информацию о состоянии соответственно флажка и переключателя. Однако если есть необходимость задействовать дополнительное третье состояние флажка (не определено - ), то придется вместо Checked использовать свойство CheckState и значения из одноименного перечисления CheckState.
Типы Button, CheckBox и RadioButton являются производными от ButtonBase, и их можно определить как некие разновидности кнопок. К членам семейства списков относятся CheckedListBox (список с флажками), ListBox (список) и ComboBox (комбинированный список).
Элемент управления CheckedListBox (список с флажками) позволяет помещать обычные флажки внутри поля с полосами прокрутки.
Кроме того, в элементе управления CheckedListBox предусмотрена возможность использования нескольких столбцов. Для этого достаточно установить значение true для свойства MultiColumn.
CheckedListBox наследует большинство своих возможностей от типа ListBox. To же самое справедливо и в отношении класса ComboBox. Наиболее важные свойства System.Windows.Forms.ListBox представлены в таблице 7.8.
| Свойство | Назначение |
|---|---|
ScrollAlwaysVisible |
Определяет, будет ли полоса прокрутки выводиться всегда |
Selectedlndex |
Индекс выделенного в настоящий момент элемента в списке (если такой имеется). Если ни один элемент не выделен, то возвращается значение -1 |
SelectedIndices |
Набор индексов выделенных в настоящий момент элементов в списке. Если не выделен ни один элемент, то возвращается пустой набор |
SelectedItem |
Значение выделенного в настоящий момент элемента. Если ни один из элементов не выделен, то возвращается null |
SelectedItems |
Возвращает коллекцию значений выделенных элементов (для списков, в которых допускается выбор нескольких значений) |
SelectionMode |
Определяет число элементов, которые возможно выбрать в списке одновременно. Для этого свойства используются значения из перечисления SelectionMode |
Sorted |
Определяет, будут ли элементы в списке упорядочены (по алфавиту) или нет |
TopIndex |
Возвращает индекс первого видимого элемента в списке |
Помимо свойств в классе ListBox определены также многочисленные методы. Подавляющее большинство этих методов дублирует возможности, предоставляемые в наше распоряжение свойствами, поэтому мы их рассматривать не будем.
Как и списки (объекты ListBox ), комбинированные списки (объекты ComboBox ) позволяют пользователю производить выбор из списка заранее определенных элементов. Однако у комбинированных списков есть одно существенное отличие от обычных: пользователь может не только выбрать готовое значение из списка, но и ввести свое собственное. Класс ComboBox наследует большинство своих возможностей от класса ListBox (который, в свою очередь, является производным от Control ), однако в нем предусмотрены и собственные важные свойства, представленные в таблице 7.9.
| Свойство | Назначение |
|---|---|
DroppedDown |
"Раскрывающийся вниз": определяет, будет ли список ниспадающим |
MaxDropDownltems |
Определяет максимальное количество элементов, которое будет показано в нижней части ниспадающего списка. Допустимые значения - от 1 до 100 |
MaxLength |
Определяет максимальную длину текста, который пользователь может ввести в ComboBox |
Selectedlndex |
Определяет индекс выделенного элемента ComboBox. Если ни один элемент не выделен, возвращается значение -1 |
Selectedltem |
Возвращает ссылку на объект выделенного элемента ComboBox |
SelectedText |
Возвращает выделенный текст в поле редактирования ComboBox |
SelectionLength |
Определяет длину (в символах) выделенного текста в поле редактирования ComboBox |
Style |
Позволяет получить или установить стиль ComboBox. Для этого свойства используются значения из перечисления ComboBoxStyle |
Text |
Позволяет получить доступ к тексту в поле редактирования. При работе с ComboBox это унаследованное свойство используется чаще всех остальных |
Стиль для ComboBox можно настроить при помощи свойства Style, для которого используются значения из перечисления ComboBoxStyle (таблица 7.10).
| Значение | Описание |
|---|---|
DropDown |
Пользователь может вводить значения в поле редактирования. Для отображения списка пользователь должен нажать на кнопку со стрелкой, направленной вниз ( Arrow Button ) |
DropDownList |
Пользователь не может вводить значения в поле редактирования. Для отображения списка пользователь должен нажать на кнопку со стрелкой, направленной вниз ( Arrow Button ) |
Simple |
Пользователь может вводить значения в поле редактирования. Список значений виден всегда |
Если на форме размещено несколько элементов управления, то пользователи обычно ожидают, что между ними можно будет перемещаться с помощью клавиши Tab. Часто бывает необходимо после размещения элементов управления настроить порядок перехода между ними. Для этого используются два свойства (унаследованные от базового класса Control и поэтому общие для всех элементов управления): TabStop и Tablndex. Для свойства TabStop используются только два значения: true и false. Если для TabStop установлено значение true, то к этому элементу управления можно будет добраться с помощью клавиши Tab. Если же установлено значение false, то участвовать в переходах по Tab этот элемент управления не будет. Если элемент управления TabStop имеет значение true,
то очередность перехода можно настроить с помощью свойства Tablndex:
В Visual Studio.NET предусмотрено средство, при помощи которого можно быстро настроить порядок перехода для элементов управления на форме. Это средство называется Tab Order Wizard и оно доступно из меню View (View > Tab Order). Чтобы изменить значения TabIndex для каждого элемента управления, достаточно просто щелкать мышью на элементах управления в выбранном нами порядке перехода. Для элементов управления, помещенных в группирующую рамку, Tab Order Wizard создает отдельную последовательность перехода.
В пространстве имен System.Windows.Forms предусмотрен элемент управления, при помощи которого пользователь может выбрать дату или диапазон дат, используя дружественный и удобный интерфейс. Это элемент управления MonthCalendar.
Наиболее важные свойства MonthCalendar представлены в табл. 7.11.
| Свойство | Назначение |
|---|---|
BoldedDates |
Массив объектов DateTime, выделенных подсветкой |
CalendarDimensions |
Определяет количество выводимых строк и столбцов |
FirstDayOfWeek |
Определяет, с какого дня будет начинаться неделя в MonthCalendar |
MaxDate |
Самая поздняя дата, которую разрешается выбрать пользователю (по умолчанию ограничений нет) |
MaxSelectionCount |
Максимальное количество дат, которое одновременно может выбрать пользователь |
MinDate |
Самая ранняя дата, которую разрешается выбрать пользователю (по умолчанию ограничений нет) |
MonthlyBoldedDates |
Массив выделенных подсветкой объектов DateTime для месяца |
SelectionRange |
Диапазон выделенных объектов |
SelectionEnd |
Самая поздняя дата в диапазоне выделенных объектов |
SelectionStart |
Самая ранняя дата в диапазоне выделенных объектов |
ShowToday |
Определяет, будет ли MonthCalendar выводить информацию о текущей дате |
ShowTodayCircle |
Определяет, будет ли MonthCalendar выводить информацию о текущей дате в нижней части и выделять ее в календаре обводкой |
ShowWeekNumbers |
Определяет, будет ли MonthCalendar отображать номера недель справа от каждой строки |
TodayDate |
Дата, которая будет считаться MonthCalendar сегодняшней. По умолчанию TodayDate - это системная дата на момент создания объекта MonthCalendar |
TodayDateSet |
Определяет, можно ли пользователю по своему усмотрению выбирать сегодняшнюю дату. Если для этого свойства установлено значение true, пользователь может выбрать в качестве сегодняшней ( TodayDate ) любое число |
По умолчанию всегда выделяется (и подсветкой, и обводкой) текущая дата. Пользователь может выбрать другую дату - в этом и есть смысл графического интерфейса MonthCalendar.
Можно получить дату, выбранную пользователем в MonthCalendar, при помощи свойства SelectionStart. Это свойство возвращает ссылку на объект DateTime, которая хранится в специальной переменной ( d ) При помощи набора свойств типа DateTime можно извлечь всю необходимую информацию в нужном нам формате.
При помощи свойств Month, Day и Year можно извлечь из объектов DateTime нужную информацию и сформировали текстовые строки. Это вполне допустимый подход. Дело в том, что дату в необходимом текстовом формате проще получить из DateTime при помощи специальных "форматирующих" свойств самих объектов DateTime. Набор таких свойств (и некоторые методы) представлен в таблице 7.12.
| Член | Назначение |
|---|---|
Date |
Позволяет получить информацию о дате (дата всегда отсчитывается от полуночи) |
Day, Month, Year |
Позволяют получить соответственно день, месяц и число из текущего объекта DateTime |
DayOfWeek |
Возвращает день недели для объекта DateTime |
DayOfYear |
Возвращает номер дня в году для объекта DateTime |
Hour, Minute, Second, |
Возвращают информацию о часе, минутах, секундах и миллисекундах для объекта DateTime |
|
Возвращают минимальное и максимальное значения для DateTime |
Now, Today |
Эти два статических свойства типа DateTime позволяют получить информацию о текущей дате и времени ( Now ) или только о текущей дате ( Today ) |
Ticks |
Позволяет получить счетчик "тиков" (с интервалом в 100 наносекунд) для объекта DateTime |
ToLongDateString( ), ToLongTimeString( ), ToShortDateString( ), ToShortTimeString( ) |
Преобразуют текущее значение объекта DateTime в разные виды текстового представления |
При помощи вышеперечисленных членов можно значительно упростить вывод текстовой информации о дате.
Назначение элемента управления Panel (панель) - с его помощью можно объединить прочие элементы управления на форме. Panel происходит от базового класса ScrollableControl и поддерживает полосы прокрутки.
Элементы управления Panel обычно используются для экономии пространства на форме. Например, если элементы управления, которые планируем разместить на форме, на ней не умещаются, то можно поместить их внутрь Panel и установить для свойства AutoScrol1 объекта Panel значение true. В результате пользователь получит возможность доступа к "не вмещающимся" элементам управления с помощью полос прокрутки.
Большинство приложений с современным пользовательским интерфейсом поддерживают всплывающие подсказки. В приложениях .NET эта возможность реализуется при помощи типа System.Windows.Forms.ToolTip. ToolTip (всплывающие подсказки) - это небольшие окна с текстом, появляющиеся при наведении указателя мыши на элемент управления на форме. Наиболее важные члены класса ToolTip представлены в таблице 7.13.
| Член | Назначение |
|---|---|
Active |
Определяет, будет ли всплывающая подсказка активной. Возможность отключить всплывающие подсказки может быть полезной, например, если в приложении предусмотрено два варианта интерфейса: для обычных и для опытных пользователей |
AutomaticDelay |
Позволяет получить или установить время задержки (в миллисекундах) при появлении подсказки |
AutoPopDelay |
Время (в миллисекундах), в течение которого подсказка остается видимой, если указатель мыши неподвижен и находится в области, занимаемой соответствующим элементом управления. По умолчанию это значение равно 10 значениям AutomaticDelay |
GetTooltip( ) |
Возвращает текст подсказки |
InitialDelay |
Время (в миллисекундах), в течение которого указатель должен оставаться неподвижным в соответствующей области для появления подсказки. Значение по умолчанию равно значению AutomaticDelay |
ReshowDelay |
Время (в миллисекундах), в течение которого появится другая подсказка при перемещении указателя мыши от одного элемента управления к другому. По умолчанию это значение равно 1/5 от значения AutomaicDelay |
SetToolTip( ) |
Ассоциирует подсказку с элементом управления |
Для того чтобы настроить использование всплывающих подсказок для элементов управления можно сделать это с помощью графических средств Visual Studio.
Первое, что необходимо сделать - добавить на форму объект ToolTip, выбрав его в ТооlBох. Затем можно указать текст всплывающей подсказки для любого элемента управления на форме (в том числе и для самой формы) из окна свойств данного элемента.
Для разработки проекта приложения форма FormEmployee должна содержать элементы управления, в соответствии с видом, приведенном на рисунке 7.4 .
(рис 7.4) Вид экранной формы FormEmployeeНа данной форме необходимо сформировать элементы управления, приведенные в таблице 7.14.
| Элемент контроля | Имя | Свойство Text/Items | Назначение |
|---|---|---|---|
SplitContainer |
splitContainerEmployee |
Две панели с разделителем | |
Label |
labelListEmployee |
Список сотрудников | Надпись |
listBox |
listBoxEmployee |
Список сотрудников | |
Label |
labelSurname |
Фамилия | Надпись |
Label |
labelName |
Имя | Надпись |
Label |
labelPatronymic |
Отчество | Надпись |
Label |
labelJobRole |
Должность | Надпись |
Label |
labelStatus |
Статус | Надпись |
Label |
labelAccess |
Уровень доступа | Надпись |
label |
labelNetName |
Сетевое имя | Надпись |
textBox |
textBoxNetName |
Сетевое имя | |
textBox |
textBoxSurname |
Фамилия | |
textBox |
textBoxName |
Имя | |
textBox |
textBoxPatronymic |
Отчество | |
comboBox |
comboBoxJobRole |
Должность | |
comboBox |
comboBoxStatus |
Активен, выходной, в отпуске, болеет, не работает, помечен как удаленный | Статус |
comboBox |
comboBoxAccess |
Оператор, старший оператор, начальник смены, администратор, аналитик | Уровень доступа |
menuItem |
menuItemAction |
Действие | Пункт меню "Редактировать" |
menuItem |
menuItemUndo |
Отменить | Подпункт меню "Отменить" |
menuItem |
menuItemNew |
Создать | Подпункт меню "Новый" |
menuItem |
menuItemEdit |
Изменить | Подпункт меню "Изменить" |
menuItem |
menuItemSave |
Сохранить | Подпункт меню "Сохранить" |
menuItem |
menuItem |
Удалить | Подпункт меню "Удалить" |
menuItem |
menuItemReport |
Отчет | Пункт меню "Отчет" |
menuItem |
menuItemReport1 |
По сотруднику | Подпункт меню "Отчет по сотруднику" |
menuItem |
menuItemReport2 |
По всем сотрудникам | Подпункт меню "Отчет по всем сотрудникам" |
Вначале создайте на форме элемент SplitContainer (рисунок 7.5). На панели 1 создайте элементы управления labelListEmployee и listBoxEmployee (рисунок 7.6), а остальные элементы управления, приведенные в таблице 7.14, - на панели 2 (рисунок 7.4).
После создания на форме FormEmployee элементов управления в соответствии с таблицей 7.14 необходимо настроить порядок перехода между ними при нажатии клавиши Tab.

(рис 7.6) Создание панелей на форме FormEmployee(рис 7.5) Формирование элементов управления на панели 1 формы FormEmployeeДля этого необходимо задать последовательные номера свойству TabIndex элементов управления (в разрабатываемой форме это необходимо сделать для элементов управления TextBox и ComboBox ) из окна Properties (рисунок 7.7) или вызвать мастер Tab Order Wizard из меню View/Tab Order (рисунок 7.8). Задание последовательности значений свойству TabIndex производится щелчком мыши на элементах управления в заданной последовательности.

(рис 7.8) Задание свойства TabIndex для элемента контроля(рис 7.7) Настройка перехода по элементам управления Результат настройки порядка перехода между элементами управления при нажатии клавиши Tab приведен на рисунке 7.9.
Для работы с формой необходимо создать методы, которые разрешают только просматривать форму (режим просмотра) и редактировать форму (режим редактирования).
(рис 7.9) Результат работы мастера Tab Order WizardСоздадим метод для задания режима просмотра формы DisplayReadOnly. Метод DisplayReadOnly должен быть общедоступным, ничего не должен возвращать и не иметь параметров. Для задания режима просмотра (только для чтения) объекту класса TextBox необходимо свойству ReadOnly присвоить значение true, а для объекта класса comboBox - свойству Enabled значение false. Код метода DisplayReadOnly представлен далее:
public void DisplayReadOnly()
{
this.textBoxSurname.ReadOnly = true;
this.textBoxName.ReadOnly = true;
this.textBoxPatronymic.ReadOnly = true;
this.textBoxNetName.ReadOnly = true;
this.comboBoxJobRole.Enabled = false;
this.comboBoxStatus.Enabled = false;
this.comboBoxAccess.Enabled = false;
}
Аналогичным образом сформируем метод , который задает режим редактирования формы:
/// Задание режима редактирования
public void DisplayEdit()
{
this.textBoxSurname.ReadOnly = false;
this.textBoxName.ReadOnly = false;
this.textBoxPatronymic.ReadOnly = false;
this.textBoxNetName.ReadOnly = false;
this.comboBoxJobRole.Enabled = true;
this.comboBoxStatus.Enabled = true;
this.comboBoxAccess.Enabled = true;
}
Для управления режимом доступности (только для чтения/редактирование) формы FormEmployee необходимо метод DisplayReadOnly вызывать при первоначальной загрузке формы (событие Load ), при создании новых данных по сотруднику и при редактировании данных по сотруднику, а метод - при сохранении данных по сотруднику и при отмене режима редактирования данных.
Проверьте правильность режима управления доступностью элементов управления формы FormEmployee.
Анализ кодов методов DisplayReadOnly( ) и показывает, что они могут быть объединены в один метод с параметром. Необходимо самостоятельно написать объединенный метод, получив в результате метод DisplayReadOnly(bool readOnly), в котором параматр readOnly определяет режим редактирования: если readOnly равен true, то режим только для просмотра, если равен false, то - редактирование.
В процессе работы приложения необходимо управлять доступом к пунктам меню в соответствии с диаграммой состояний для пунктов меню формы FormEmployee, приведенной на рисунке 7.10.
(рис 7.10) Диаграмма состояний для активности подпунктов меню "Действие"Диаграмма отображает возможные переходы между тремя режимами: "Просмотр", "Редактирование" и "Создание нового сотрудника".
При выборе в главном меню приложения пункта "Сотрудник" Windows -форма FormEmployee должна перейти в режим "Просмотр", что определяет доступ к пунктам меню "Создать", "Редактировать", "Удалить" и запрет доступа к подпунктам меню "Отменить", "Сохранить".
Если в режиме просмотр выбирается подпункт меню "Удалить", то в результате выполнения данной функции режим Windows-формы FormEmployee не должен измениться, т.е. форма должна остаться в режиме "Просмотр".
Если в режиме просмотр выбирается подпункт меню "Изменить", то Windows-формы FormEmployee должна перейти в режим "Редактирование". Данный режим предполагает, что разрешается доступ к подпунктам меню "Отменить", "Сохранить" и запрещается доступа к подпунктам меню "Создать", "Редактировать", "Удалить".
Аналогичным образом интерпретируются переходы формы FormEmployee из одного режима в другой.
На рисунке 7.10 представлены режимы и переходы для подпунктов главного меню. Аналогичные режимы необходимо соблюдать для контекстного меню и кнопок панели инструментов.
Для управления доступом к пунктам главного меню создайте методы MenuItemEnabled(bool itemEnabled), для контекстного меню - MenuItemContextEnabled(bool itemEnabled) и для кнопок панели управления - StripButtonEnabled(bool itemEnabled). Управление доступностью пунктов главного и контекстного меню осуществляется через свойство Enabled класса ToolStripMenuItem, а кнопок панели управления - через свойство Enabled класса ToolStripButton.
Проверьте правильность режима управления пунктов главного и контекстного меню, а также кнопок панели управления формы FormEmployee.
С учетом того, что установка режимов просмотра и редактирования экранной формы, а также управление доступом к пунктам меню должно выполняться при реализации нескольких функций программы целесообразно для избежания дублирования кода все методы управления режимами объединить в один метод DisplayForm.
private void DisplayForm(bool mode)
{
DisplayReadOnly(mode);
MenuItemEnabled(mode);
MenuItemContextEnabled(mode);
StripButtonEnabled(mode);
}
Первоначальная установка режима "Просмотр" должна проводиться при первоначальной загрузке формы FormEmployee.
Load.Цель работы: Изучить основные элементы управления Windows -форм, их свойства и методы, а также получить практические навыки в разработке Windows -форм с элементами контроля
Классы, представляющие графические элементы управления, находятся в пространстве имен System.Windows.Forms. С их помощью обеспечивается реакция на действия пользователя в приложении Windows Forms. Классы элементов управления связаны между собой достаточно сложными отношениями наследования. Общая схема таких отношений представлена на рисунке 7.1.
Класс Control, как общий предок, обеспечивает все производные классы общим набором важнейших возможностей. В числе этих возможностей можно перечислить события мыши и клавиатуры, физические размеры и местонахождение элемента управления (свойства Height, Width, Left, Right, Location ), установку цвета фона и цвета переднего плана, выбор шрифта и т.п.
При создании приложения можно добавить элементы управления на форму при помощи графических средств Visual Studio. Обычно достаточно выбрать нужный элемент управления в окне ToolBox и поместить его на форме. Visual Studio автоматически сгенерирует нужный код для формы. После этого можно изменить название элемента управления на более содержательное (например, вместо button1, предлагаемого по умолчанию, - buttonPrimer ) Visual Studio позволяет не только размещать на форме элементы управления, но и настраивать их свойства. Для этого достаточно щелкнуть на элементе управления правой кнопкой мыши и в контекстном меню выбрать Properties (Свойства).
(рис 7.1) Иерархия элементов управления Windows FormsВсе изменения, которые необходимо произвести в открывшемся окне (рисунок 7.2), будут добавлены в код метода InitializeComponents().

То же самое окно позволяет настроить не только свойства данного элемента управления, но и обработку событий этого элемента. Перейти в список событий можно при помощи кнопки
(рис 7.2) в закладке Properties (рисунок 7.3). Можно выбрать в списке нужное событие и рядом с ним сделать двойной щелчок или ввести имя метода или выбрать метод из списка.
(рис 7.3) Настройка обработчиков событийПосле задания имени метода или двойного щелчка Visual Studio сгенерирует заготовку для обработчика события.
Рассмотрим основные элементы управления Windows -форм.
Элемент управления TextBox (текстовое окно) предназначен для хранения текста (одной или нескольких строк). При желании текст в TextBox может быть настроен как "только для чтения", а в правой и нижней части можно поместить полосы прокрутки.
Класс TextBox происходит непосредственно от класса TextBoxBase, обеспечивает общими возможностями как TextBox, так и RichTextBox. Свойства, определенные в TextBoxBase, представлены в таблице 7.1.
| Свойство | Назначение |
|---|---|
AcceptsTab |
Определяет, что будет производиться при нажатии на клавишу Tab: вставка символа табуляции в само поле или переход к другому элементу управления |
AutoSize |
Определяет, будет ли элемент управления автоматически изменять размер при изменении шрифта на нем |
BackColor, ForeColor |
Позволяют получить или установить значение цвета фона и переднего плана |
HideSelection |
Позволяет получить или установить значение, определяющее, будет ли текст в TextBox оставаться выделенным после того, как этот элемент управления будет выведен из фокуса |
MaxLength |
Определяет максимальное количество символов, которое можно будет ввести в TextBox |
Modified |
Позволяет получить или установить значение, определяющее, был ли текст в TextBox изменен пользователем |
Multiline |
Указывает, может ли TextBox содержать несколько строк текста |
Readonly |
Помечает TextBox как "только для чтения" |
SelectedText, SelectionLength |
Содержат выделенный текст (или определенное количество символов) в TextBox |
SelectionStart |
Позволяет получить начало выделенного текста в TextBox |
|
Определяет, будет ли текст в TextBox автоматически переноситься на новую строку при достижении предельной длины строки |
В TextBoxBase также определено множество методов: для работы с буфером обмена ( Cut, Copy и Paste ), отменой ввода ( Undo ) и прочими возможностями редактирования ( Clear, AppendText и т. п.).
Из всех событий, определенных в TextBoxBase, наибольший интерес представляет событие TextChange. Это событие происходит при изменении текста в объекте класса, производном от TextBoxBase. Например, его можно использовать для
Свойства, унаследованные от Control и от TextBoxBase, определяют большую часть возможностей TextBox. Свойств, определенных непосредственно в классе TextBox, не так уж и много. Они представлены в таблице 7.2.
| Свойство | Назначение |
|---|---|
AcceptsReturn |
Позволяет определить, что происходит, когда пользователь при вводе текста нажал на Enter. Варианта два: либо в TextBox начинается новая строка текста, либо активизируется кнопка по умолчанию на форме |
CharacterCasing |
Позволяет получить или установить значение, определяющее, будет ли изменяться регистр вводимых пользователем символов |
PasswordChar |
Позволяет выбрать символ, используемый для отображения вводимых пользователем данных (в поле для ввода пароля) |
ScrollBars |
Позволяет получить или установить значение, определяющее, будут ли в TextBox с несколькими строками присутствовать полосы прокрутки |
TextAlign |
Позволяет определить выравнивание текста в TextBox (используются значения из перечисления HorizontalAlignment ) |
Значения перечисления HorizontalAlignment представлены в таблице 7.3.
| Значение | Описание |
|---|---|
Center |
Выравнивание по центру |
Left |
Выравнивание по левому краю |
Right |
Выравнивание по правому краю |
Кнопка ( button ) - это самый простой из всех элементов управления и при этом наиболее часто используемый. Можно сказать, что кнопка - это возможность принять ввод (щелчок кнопкой мыши или набор на клавиатуре) наиболее простым способом. Непосредственный предок класса System.Windows.FormButton в иерархии классов .NET - это класс ButtonBase, обеспечивающий общие возможности для целой группы производных от него элементов управления (таких как Button, CheckBox и RadioButton ). Некоторые свойства ButtonBase представлены в таблице 7.4.
| Свойство | Назначение |
|---|---|
FlatStyle |
Позволяет настроить "рельефность" кнопки. Используются значения из перечисления FlatStyle |
Image |
Позволяет задать изображение, которое будет выводиться на кнопке (при этом можно указать точное местонахождение изображения). Фоновый рисунок лучше настраивать при помощи свойства BackgroundImage, определенного в базовом классе Control |
ImageAlign |
Позволяет определить выравнивание изображения, размещенного на кнопке. Используются значения из перечисления ContentAlignment |
Imagelndex, ImageList |
Эти свойства используются для работы с набором изображений (объектом ImageList ), выводимых на кнопке |
IsDefault |
Определяет, будет ли эта кнопка являться кнопкой по умолчанию (то есть срабатывать при нажатии на Enter ) |
TextAlign |
Позволяет получить или установить выравнивание текста на кнопке. Также используются значения из перечисления ContentAlignment |
Сам класс Button не определяет каких-либо дополнительных возможностей помимо унаследованных от ButtonBase, за единственным, но существенным исключением свойства DialogResult. Это свойство позволяет возвращать значение при закрытии диалогового окна, например, при нажатии кнопок ОК или Cancel (Отменить).
В подавляющем большинстве случаев выравнивание текста, размещенного на кнопке, производится по центру, так что текст будет размещен строго посередине кнопки. Однако если нам по каким-то причинам необходимо использовать другой стиль выравнивания, в нашем распоряжении - свойство TextAlign, определенное в классе ButtonBase. Для TextAlign используются значения из перечисления ContentAlignment (таблица 7.5). Значения из того же перечисления используются и для определения положения изображения на кнопке.
| Значение | Описание (выравнивание) |
|---|---|
BottomCenter |
По нижнему краю кнопки, относительно боковых краев - посередине |
BottomLeft |
Но нижнему краю кнопки, слева |
BottomRight |
По нижнему краю кнопки, справа |
MiddleCenter |
По центру кнопки |
MiddleLeft |
Относительно верхнего и нижнего краев - по центру, относительно боковых краев - слева |
MiddleRight |
Относительно верхнего и нижнего краев - по центру, относительно боковых краев - справа |
TopCenter |
По верхнему краю кнопки, относительно боковых краев - посередине |
TopLeft |
По верхнему краю кнопки, слева |
TopRight |
По верхнему краю кнопки, справа |
Для флажка (тип CheckBox ) предусмотрено три возможных состояния. Как и тип Button, CheckBox наследует большую часть своих возможностей от базовых классов Control и ButtonBase. Однако в этом классе существуют и свои собственные члены, обеспечивающие дополнительные уникальные возможности. Наиболее важные свойства CheckBox представлены в таблице 7.6.
| Свойство | Назначение |
|---|---|
Appearance |
Настраивает вид флажка. Для этого свойства используются значения из перечисления Appearance |
AutoCheck |
Позволяет получить или установить значение, определяющее, будут ли значения Checked и CheckState, а также внешний вид флажка автоматически изменяться при щелчке на нем |
CheckAlign |
Позволяет установить горизонтальное и вертикальное выравнивание собственно флажка (квадратика) в элементе управления CheckBox. Используются значения из перечисления ContentAlignment |
Checked |
Возвращает значение типа bool, представляющее текущее состояние флажка (выбран или не выбран) Если для свойства ThreeState установлено значение true, то свойство Checked будет возвращать true как для явно выбранного флажка, так и для того флажка, для которого установлено значение "не определено" ( ) |
CheckState |
Позволяет получить или установить значение флажка (установлен - не установлен - не определено), используя не true и false, как в Checked, а три значения из перечисления CheckState. Обычно используется, если свойство ThreeState для флажка имеет значение true (то есть он допускает три значения). |
ThreeState |
Определяет, будут ли для флажка использоваться три значения (из перечисления CheckState ) или только два |
Возможные состояния флажка ( можно использовать только тогда, когда для свойства ThreeState установлено значение true ) представлены в таблице 7.7.
| Значение | Описание |
|---|---|
Checked |
Флажок установлен |
|
Значение не определено (обычно флажок выглядит как "серый", затененный) |
Unchecked |
Флажок снят |
Состояние "значение не определено" ( ) может быть установлено, например, для верхнего элемента иерархии, в которой для одной части подчиненных элементов флажок установлен, а для другой - снят.
Тип RadioButton (переключатель) можно воспринимать, как несколько видоизмененный флажок при этом сходство между этими типами подчеркивается почти полным совпадением наборов членов. Между типами RadioButton и CheckBox существуют лишь два важных различия: в RadioButton предусмотрено событие CheckedChanged (возникающее при изменении значения Checked ), а кроме того, RadioButton не поддерживает свойство ThreeState и не может принимать состояние (не определено).
Переключатели всегда используются в группах, которые рассматриваются как некое единое целое. Внутри группы переключателей одновременно может быть выбран только один переключатель. Для группировки переключателей в группы используется тип GroupBox.
И флажок ( CheckBox ), и переключатель ( RadioButton ) поддерживают свойство Checked, при помощи которого очень удобно получать информацию о состоянии соответственно флажка и переключателя. Однако если есть необходимость задействовать дополнительное третье состояние флажка (не определено - ), то придется вместо Checked использовать свойство CheckState и значения из одноименного перечисления CheckState.
Типы Button, CheckBox и RadioButton являются производными от ButtonBase, и их можно определить как некие разновидности кнопок. К членам семейства списков относятся CheckedListBox (список с флажками), ListBox (список) и ComboBox (комбинированный список).
Элемент управления CheckedListBox (список с флажками) позволяет помещать обычные флажки внутри поля с полосами прокрутки.
Кроме того, в элементе управления CheckedListBox предусмотрена возможность использования нескольких столбцов. Для этого достаточно установить значение true для свойства MultiColumn.
CheckedListBox наследует большинство своих возможностей от типа ListBox. To же самое справедливо и в отношении класса ComboBox. Наиболее важные свойства System.Windows.Forms.ListBox представлены в таблице 7.8.
| Свойство | Назначение |
|---|---|
ScrollAlwaysVisible |
Определяет, будет ли полоса прокрутки выводиться всегда |
Selectedlndex |
Индекс выделенного в настоящий момент элемента в списке (если такой имеется). Если ни один элемент не выделен, то возвращается значение -1 |
SelectedIndices |
Набор индексов выделенных в настоящий момент элементов в списке. Если не выделен ни один элемент, то возвращается пустой набор |
SelectedItem |
Значение выделенного в настоящий момент элемента. Если ни один из элементов не выделен, то возвращается null |
SelectedItems |
Возвращает коллекцию значений выделенных элементов (для списков, в которых допускается выбор нескольких значений) |
SelectionMode |
Определяет число элементов, которые возможно выбрать в списке одновременно. Для этого свойства используются значения из перечисления SelectionMode |
Sorted |
Определяет, будут ли элементы в списке упорядочены (по алфавиту) или нет |
TopIndex |
Возвращает индекс первого видимого элемента в списке |
Помимо свойств в классе ListBox определены также многочисленные методы. Подавляющее большинство этих методов дублирует возможности, предоставляемые в наше распоряжение свойствами, поэтому мы их рассматривать не будем.
Как и списки (объекты ListBox ), комбинированные списки (объекты ComboBox ) позволяют пользователю производить выбор из списка заранее определенных элементов. Однако у комбинированных списков есть одно существенное отличие от обычных: пользователь может не только выбрать готовое значение из списка, но и ввести свое собственное. Класс ComboBox наследует большинство своих возможностей от класса ListBox (который, в свою очередь, является производным от Control ), однако в нем предусмотрены и собственные важные свойства, представленные в таблице 7.9.
| Свойство | Назначение |
|---|---|
DroppedDown |
"Раскрывающийся вниз": определяет, будет ли список ниспадающим |
MaxDropDownltems |
Определяет максимальное количество элементов, которое будет показано в нижней части ниспадающего списка. Допустимые значения - от 1 до 100 |
MaxLength |
Определяет максимальную длину текста, который пользователь может ввести в ComboBox |
Selectedlndex |
Определяет индекс выделенного элемента ComboBox. Если ни один элемент не выделен, возвращается значение -1 |
Selectedltem |
Возвращает ссылку на объект выделенного элемента ComboBox |
SelectedText |
Возвращает выделенный текст в поле редактирования ComboBox |
SelectionLength |
Определяет длину (в символах) выделенного текста в поле редактирования ComboBox |
Style |
Позволяет получить или установить стиль ComboBox. Для этого свойства используются значения из перечисления ComboBoxStyle |
Text |
Позволяет получить доступ к тексту в поле редактирования. При работе с ComboBox это унаследованное свойство используется чаще всех остальных |
Стиль для ComboBox можно настроить при помощи свойства Style, для которого используются значения из перечисления ComboBoxStyle (таблица 7.10).
| Значение | Описание |
|---|---|
DropDown |
Пользователь может вводить значения в поле редактирования. Для отображения списка пользователь должен нажать на кнопку со стрелкой, направленной вниз ( Arrow Button ) |
DropDownList |
Пользователь не может вводить значения в поле редактирования. Для отображения списка пользователь должен нажать на кнопку со стрелкой, направленной вниз ( Arrow Button ) |
Simple |
Пользователь может вводить значения в поле редактирования. Список значений виден всегда |
Если на форме размещено несколько элементов управления, то пользователи обычно ожидают, что между ними можно будет перемещаться с помощью клавиши Tab. Часто бывает необходимо после размещения элементов управления настроить порядок перехода между ними. Для этого используются два свойства (унаследованные от базового класса Control и поэтому общие для всех элементов управления): TabStop и Tablndex. Для свойства TabStop используются только два значения: true и false. Если для TabStop установлено значение true, то к этому элементу управления можно будет добраться с помощью клавиши Tab. Если же установлено значение false, то участвовать в переходах по Tab этот элемент управления не будет. Если элемент управления TabStop имеет значение true,
то очередность перехода можно настроить с помощью свойства Tablndex:
В Visual Studio.NET предусмотрено средство, при помощи которого можно быстро настроить порядок перехода для элементов управления на форме. Это средство называется Tab Order Wizard и оно доступно из меню View (View > Tab Order). Чтобы изменить значения TabIndex для каждого элемента управления, достаточно просто щелкать мышью на элементах управления в выбранном нами порядке перехода. Для элементов управления, помещенных в группирующую рамку, Tab Order Wizard создает отдельную последовательность перехода.
В пространстве имен System.Windows.Forms предусмотрен элемент управления, при помощи которого пользователь может выбрать дату или диапазон дат, используя дружественный и удобный интерфейс. Это элемент управления MonthCalendar.
Наиболее важные свойства MonthCalendar представлены в табл. 7.11.
| Свойство | Назначение |
|---|---|
BoldedDates |
Массив объектов DateTime, выделенных подсветкой |
CalendarDimensions |
Определяет количество выводимых строк и столбцов |
FirstDayOfWeek |
Определяет, с какого дня будет начинаться неделя в MonthCalendar |
MaxDate |
Самая поздняя дата, которую разрешается выбрать пользователю (по умолчанию ограничений нет) |
MaxSelectionCount |
Максимальное количество дат, которое одновременно может выбрать пользователь |
MinDate |
Самая ранняя дата, которую разрешается выбрать пользователю (по умолчанию ограничений нет) |
MonthlyBoldedDates |
Массив выделенных подсветкой объектов DateTime для месяца |
SelectionRange |
Диапазон выделенных объектов |
SelectionEnd |
Самая поздняя дата в диапазоне выделенных объектов |
SelectionStart |
Самая ранняя дата в диапазоне выделенных объектов |
ShowToday |
Определяет, будет ли MonthCalendar выводить информацию о текущей дате |
ShowTodayCircle |
Определяет, будет ли MonthCalendar выводить информацию о текущей дате в нижней части и выделять ее в календаре обводкой |
ShowWeekNumbers |
Определяет, будет ли MonthCalendar отображать номера недель справа от каждой строки |
TodayDate |
Дата, которая будет считаться MonthCalendar сегодняшней. По умолчанию TodayDate - это системная дата на момент создания объекта MonthCalendar |
TodayDateSet |
Определяет, можно ли пользователю по своему усмотрению выбирать сегодняшнюю дату. Если для этого свойства установлено значение true, пользователь может выбрать в качестве сегодняшней ( TodayDate ) любое число |
По умолчанию всегда выделяется (и подсветкой, и обводкой) текущая дата. Пользователь может выбрать другую дату - в этом и есть смысл графического интерфейса MonthCalendar.
Можно получить дату, выбранную пользователем в MonthCalendar, при помощи свойства SelectionStart. Это свойство возвращает ссылку на объект DateTime, которая хранится в специальной переменной ( d ) При помощи набора свойств типа DateTime можно извлечь всю необходимую информацию в нужном нам формате.
При помощи свойств Month, Day и Year можно извлечь из объектов DateTime нужную информацию и сформировали текстовые строки. Это вполне допустимый подход. Дело в том, что дату в необходимом текстовом формате проще получить из DateTime при помощи специальных "форматирующих" свойств самих объектов DateTime. Набор таких свойств (и некоторые методы) представлен в таблице 7.12.
| Член | Назначение |
|---|---|
Date |
Позволяет получить информацию о дате (дата всегда отсчитывается от полуночи) |
Day, Month, Year |
Позволяют получить соответственно день, месяц и число из текущего объекта DateTime |
DayOfWeek |
Возвращает день недели для объекта DateTime |
DayOfYear |
Возвращает номер дня в году для объекта DateTime |
Hour, Minute, Second, |
Возвращают информацию о часе, минутах, секундах и миллисекундах для объекта DateTime |
|
Возвращают минимальное и максимальное значения для DateTime |
Now, Today |
Эти два статических свойства типа DateTime позволяют получить информацию о текущей дате и времени ( Now ) или только о текущей дате ( Today ) |
Ticks |
Позволяет получить счетчик "тиков" (с интервалом в 100 наносекунд) для объекта DateTime |
ToLongDateString( ), ToLongTimeString( ), ToShortDateString( ), ToShortTimeString( ) |
Преобразуют текущее значение объекта DateTime в разные виды текстового представления |
При помощи вышеперечисленных членов можно значительно упростить вывод текстовой информации о дате.
Назначение элемента управления Panel (панель) - с его помощью можно объединить прочие элементы управления на форме. Panel происходит от базового класса ScrollableControl и поддерживает полосы прокрутки.
Элементы управления Panel обычно используются для экономии пространства на форме. Например, если элементы управления, которые планируем разместить на форме, на ней не умещаются, то можно поместить их внутрь Panel и установить для свойства AutoScrol1 объекта Panel значение true. В результате пользователь получит возможность доступа к "не вмещающимся" элементам управления с помощью полос прокрутки.
Большинство приложений с современным пользовательским интерфейсом поддерживают всплывающие подсказки. В приложениях .NET эта возможность реализуется при помощи типа System.Windows.Forms.ToolTip. ToolTip (всплывающие подсказки) - это небольшие окна с текстом, появляющиеся при наведении указателя мыши на элемент управления на форме. Наиболее важные члены класса ToolTip представлены в таблице 7.13.
| Член | Назначение |
|---|---|
Active |
Определяет, будет ли всплывающая подсказка активной. Возможность отключить всплывающие подсказки может быть полезной, например, если в приложении предусмотрено два варианта интерфейса: для обычных и для опытных пользователей |
AutomaticDelay |
Позволяет получить или установить время задержки (в миллисекундах) при появлении подсказки |
AutoPopDelay |
Время (в миллисекундах), в течение которого подсказка остается видимой, если указатель мыши неподвижен и находится в области, занимаемой соответствующим элементом управления. По умолчанию это значение равно 10 значениям AutomaticDelay |
GetTooltip( ) |
Возвращает текст подсказки |
InitialDelay |
Время (в миллисекундах), в течение которого указатель должен оставаться неподвижным в соответствующей области для появления подсказки. Значение по умолчанию равно значению AutomaticDelay |
ReshowDelay |
Время (в миллисекундах), в течение которого появится другая подсказка при перемещении указателя мыши от одного элемента управления к другому. По умолчанию это значение равно 1/5 от значения AutomaicDelay |
SetToolTip( ) |
Ассоциирует подсказку с элементом управления |
Для того чтобы настроить использование всплывающих подсказок для элементов управления можно сделать это с помощью графических средств Visual Studio.
Первое, что необходимо сделать - добавить на форму объект ToolTip, выбрав его в ТооlBох. Затем можно указать текст всплывающей подсказки для любого элемента управления на форме (в том числе и для самой формы) из окна свойств данного элемента.
Для разработки проекта приложения форма FormEmployee должна содержать элементы управления, в соответствии с видом, приведенном на рисунке 7.4 .
(рис 7.4) Вид экранной формы FormEmployeeНа данной форме необходимо сформировать элементы управления, приведенные в таблице 7.14.
| Элемент контроля | Имя | Свойство Text/Items | Назначение |
|---|---|---|---|
SplitContainer |
splitContainerEmployee |
Две панели с разделителем | |
Label |
labelListEmployee |
Список сотрудников | Надпись |
listBox |
listBoxEmployee |
Список сотрудников | |
Label |
labelSurname |
Фамилия | Надпись |
Label |
labelName |
Имя | Надпись |
Label |
labelPatronymic |
Отчество | Надпись |
Label |
labelJobRole |
Должность | Надпись |
Label |
labelStatus |
Статус | Надпись |
Label |
labelAccess |
Уровень доступа | Надпись |
label |
labelNetName |
Сетевое имя | Надпись |
textBox |
textBoxNetName |
Сетевое имя | |
textBox |
textBoxSurname |
Фамилия | |
textBox |
textBoxName |
Имя | |
textBox |
textBoxPatronymic |
Отчество | |
comboBox |
comboBoxJobRole |
Должность | |
comboBox |
comboBoxStatus |
Активен, выходной, в отпуске, болеет, не работает, помечен как удаленный | Статус |
comboBox |
comboBoxAccess |
Оператор, старший оператор, начальник смены, администратор, аналитик | Уровень доступа |
menuItem |
menuItemAction |
Действие | Пункт меню "Редактировать" |
menuItem |
menuItemUndo |
Отменить | Подпункт меню "Отменить" |
menuItem |
menuItemNew |
Создать | Подпункт меню "Новый" |
menuItem |
menuItemEdit |
Изменить | Подпункт меню "Изменить" |
menuItem |
menuItemSave |
Сохранить | Подпункт меню "Сохранить" |
menuItem |
menuItem |
Удалить | Подпункт меню "Удалить" |
menuItem |
menuItemReport |
Отчет | Пункт меню "Отчет" |
menuItem |
menuItemReport1 |
По сотруднику | Подпункт меню "Отчет по сотруднику" |
menuItem |
menuItemReport2 |
По всем сотрудникам | Подпункт меню "Отчет по всем сотрудникам" |
Вначале создайте на форме элемент SplitContainer (рисунок 7.5). На панели 1 создайте элементы управления labelListEmployee и listBoxEmployee (рисунок 7.6), а остальные элементы управления, приведенные в таблице 7.14, - на панели 2 (рисунок 7.4).
После создания на форме FormEmployee элементов управления в соответствии с таблицей 7.14 необходимо настроить порядок перехода между ними при нажатии клавиши Tab.

(рис 7.6) Создание панелей на форме FormEmployee(рис 7.5) Формирование элементов управления на панели 1 формы FormEmployeeДля этого необходимо задать последовательные номера свойству TabIndex элементов управления (в разрабатываемой форме это необходимо сделать для элементов управления TextBox и ComboBox ) из окна Properties (рисунок 7.7) или вызвать мастер Tab Order Wizard из меню View/Tab Order (рисунок 7.8). Задание последовательности значений свойству TabIndex производится щелчком мыши на элементах управления в заданной последовательности.

(рис 7.8) Задание свойства TabIndex для элемента контроля(рис 7.7) Настройка перехода по элементам управления Результат настройки порядка перехода между элементами управления при нажатии клавиши Tab приведен на рисунке 7.9.
Для работы с формой необходимо создать методы, которые разрешают только просматривать форму (режим просмотра) и редактировать форму (режим редактирования).
(рис 7.9) Результат работы мастера Tab Order WizardСоздадим метод для задания режима просмотра формы DisplayReadOnly. Метод DisplayReadOnly должен быть общедоступным, ничего не должен возвращать и не иметь параметров. Для задания режима просмотра (только для чтения) объекту класса TextBox необходимо свойству ReadOnly присвоить значение true, а для объекта класса comboBox - свойству Enabled значение false. Код метода DisplayReadOnly представлен далее:
public void DisplayReadOnly()
{
this.textBoxSurname.ReadOnly = true;
this.textBoxName.ReadOnly = true;
this.textBoxPatronymic.ReadOnly = true;
this.textBoxNetName.ReadOnly = true;
this.comboBoxJobRole.Enabled = false;
this.comboBoxStatus.Enabled = false;
this.comboBoxAccess.Enabled = false;
}
Аналогичным образом сформируем метод , который задает режим редактирования формы:
/// Задание режима редактирования
public void DisplayEdit()
{
this.textBoxSurname.ReadOnly = false;
this.textBoxName.ReadOnly = false;
this.textBoxPatronymic.ReadOnly = false;
this.textBoxNetName.ReadOnly = false;
this.comboBoxJobRole.Enabled = true;
this.comboBoxStatus.Enabled = true;
this.comboBoxAccess.Enabled = true;
}
Для управления режимом доступности (только для чтения/редактирование) формы FormEmployee необходимо метод DisplayReadOnly вызывать при первоначальной загрузке формы (событие Load ), при создании новых данных по сотруднику и при редактировании данных по сотруднику, а метод - при сохранении данных по сотруднику и при отмене режима редактирования данных.
Проверьте правильность режима управления доступностью элементов управления формы FormEmployee.
Анализ кодов методов DisplayReadOnly( ) и показывает, что они могут быть объединены в один метод с параметром. Необходимо самостоятельно написать объединенный метод, получив в результате метод DisplayReadOnly(bool readOnly), в котором параматр readOnly определяет режим редактирования: если readOnly равен true, то режим только для просмотра, если равен false, то - редактирование.
В процессе работы приложения необходимо управлять доступом к пунктам меню в соответствии с диаграммой состояний для пунктов меню формы FormEmployee, приведенной на рисунке 7.10.
(рис 7.10) Диаграмма состояний для активности подпунктов меню "Действие"Диаграмма отображает возможные переходы между тремя режимами: "Просмотр", "Редактирование" и "Создание нового сотрудника".
При выборе в главном меню приложения пункта "Сотрудник" Windows -форма FormEmployee должна перейти в режим "Просмотр", что определяет доступ к пунктам меню "Создать", "Редактировать", "Удалить" и запрет доступа к подпунктам меню "Отменить", "Сохранить".
Если в режиме просмотр выбирается подпункт меню "Удалить", то в результате выполнения данной функции режим Windows-формы FormEmployee не должен измениться, т.е. форма должна остаться в режиме "Просмотр".
Если в режиме просмотр выбирается подпункт меню "Изменить", то Windows-формы FormEmployee должна перейти в режим "Редактирование". Данный режим предполагает, что разрешается доступ к подпунктам меню "Отменить", "Сохранить" и запрещается доступа к подпунктам меню "Создать", "Редактировать", "Удалить".
Аналогичным образом интерпретируются переходы формы FormEmployee из одного режима в другой.
На рисунке 7.10 представлены режимы и переходы для подпунктов главного меню. Аналогичные режимы необходимо соблюдать для контекстного меню и кнопок панели инструментов.
Для управления доступом к пунктам главного меню создайте методы MenuItemEnabled(bool itemEnabled), для контекстного меню - MenuItemContextEnabled(bool itemEnabled) и для кнопок панели управления - StripButtonEnabled(bool itemEnabled). Управление доступностью пунктов главного и контекстного меню осуществляется через свойство Enabled класса ToolStripMenuItem, а кнопок панели управления - через свойство Enabled класса ToolStripButton.
Проверьте правильность режима управления пунктов главного и контекстного меню, а также кнопок панели управления формы FormEmployee.
С учетом того, что установка режимов просмотра и редактирования экранной формы, а также управление доступом к пунктам меню должно выполняться при реализации нескольких функций программы целесообразно для избежания дублирования кода все методы управления режимами объединить в один метод DisplayForm.
private void DisplayForm(bool mode)
{
DisplayReadOnly(mode);
MenuItemEnabled(mode);
MenuItemContextEnabled(mode);
StripButtonEnabled(mode);
}
Первоначальная установка режима "Просмотр" должна проводиться при первоначальной загрузке формы FormEmployee.
Load.Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.