События в Windows Forms. События формы 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

События в Windows Forms. События формы



Основы форм

 

 

Внешний вид приложения является нам преимущественно через формы. Формы являются основными строительными блоками. Они предоставляют контейнер для различных элементов управления. А механизм событий позволяет элементам формы отзываться на ввод пользователя, и, таким образом, взаимодействовать с пользователем.

 

При открытии проекта в Visual Studio в графическом редакторе мы можем увидеть визуальную часть формы - ту часть, которую мы видим после запуска приложения и куда мы переносим элементы с панели управления. Но на самом деле форма скрывает мощный функционал, состоящий из методов, свойств, событий и прочее. Рассмотрим основные свойства форм.

 

Если мы запустим приложение, то нам отобразится одна пустая форма. Однако даже такой простой проект с пустой формой имеет несколько компонентов:

 

App.config - файл конфигурации приложения.

Form1.Desinger.cs - Дизайнер формы на C#.

Form1.resx - Ресурсы формы.

Program.cs - Точка входа в программу.

 

Не смотря на то что мы видим только форму но стартовой точкой входа в графическое приложение является класс Program, расположенный в файле Program.cs:

 

Сначала программой запускается данный класс, затем с помощью выражения Application.Run(new Form1()) он запускает форму Form1. Если вдруг мы захотим изменить стартовую форму в приложении на какую-нибудь другую, то нам надо изменить в этом выражении Form1 на соответствующий класс формы.

 

Сама форма сложна по содержанию. Она делится на ряд компонентов. Так, в структуре проекта есть файл Form1.Designer.cs, который выглядит примерно так:

___________________________________________________________________________

Namespace WindowsFormsApp4

{

partial class Form1

{

   /// <summary>

   /// Обязательная переменная конструктора.

   /// </summary>

   private System.ComponentModel.IContainer components = null;

   /// <summary>

   /// Освободить все используемые ресурсы.

   /// </summary>

   /// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>

   protected override void Dispose(bool disposing)

   {

       if (disposing && (components!= null))

       {

           components.Dispose();

       }

       base.Dispose(disposing);

   }

   #region Код, автоматически созданный конструктором форм Windows

    /// <summary>

   /// Требуемый метод для поддержки конструктора — не изменяйте

   /// содержимое этого метода с помощью редактора кода.

   /// </summary>

   private void InitializeComponent()

   {

       this.button1 = new System.Windows.Forms.Button();

       this.SuspendLayout();

       //

       // button1

       //

       this.button1.Location = new System.Drawing.Point(63, 174);

       this.button1.Name = "button1";

       this.button1.Size = new System.Drawing.Size(146, 23);

       this.button1.TabIndex = 0;

       this.button1.Text = " Нажми на меня ";

       this.button1.UseVisualStyleBackColor = true;

       this.button1.Click += new System.EventHandler(this.button1_Click);

       //

       // Form1

       //

       this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);

       this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

       this.ClientSize = new System.Drawing.Size(284, 277);

       this.Controls.Add(this.button1);

       this.Name = "Form1";

       this.Text = " ПРОЕКт ";

       this.Load += new System.EventHandler(this.Form1_Load);

       this.ResumeLayout(false);

  }

   #endregion

   private System.Windows.Forms.Button button1;

}

}

___________________________________________________________________________


Здесь объявляется частичный класс формы Form1, которая имеет два метода: Dispose(), который выполняет роль деструктора объекта, и InitializeComponent(), который устанавливает начальные значения свойств формы.

 

При добавлении элементов управления, например, кнопок, их описание также добавляется в этот файл.

 

Еще один файл - Form1.resx - хранит ресурсы формы. Как правило, ресурсы используются для создания однообразных форм сразу для нескольких языковых культур.

 

И более важный файл - Form1.cs, который в структуре проекта называется просто Form1, содержит код или программную логику формы:

 

По умолчанию в Form1.cs содержится только конструктор формы, в котором просто вызывается метод InitializeComponent(), объявленный в файле дизайнера Form1.Designer.cs


 

Основные свойства форм.

С помощью специального окна Свойства справа Visual Studio предоставляет нам удобный интерфейс для управления свойствами элемента:

 

Большинство этих свойств оказывает влияние на визуальное отображение формы. Основные свойства:

Name: устанавливает имя формы - точнее имя класса, который наследуется от класса Form

 

BackColor: указывает на фоновый цвет формы. Щелкнув на это свойство, мы сможем выбрать тот цвет, который нам подходит из списка предложенных цветов или цветовой палитры

 

BackgroundImage: указывает на фоновое изображение формы

 

BackgroundImageLayout: определяет, как изображение, заданное в свойстве BackgroundImage, будет располагаться на форме.

 

ControlBox: указывает, отображается ли меню формы. В данном случае под меню понимается меню самого верхнего уровня, где находятся иконка приложения, заголовок формы, а также кнопки минимизации формы и крестик. Если данное свойство имеет значение false, то мы не увидим ни иконку, ни крестика, с помощью которого обычно закрывается форма

 

Cursor: определяет тип курсора, который используется на форме

 

Enabled: если данное свойство имеет значение false, то она не сможет получать ввод от пользователя, то есть мы не сможем нажать на кнопки, ввести текст в текстовые поля и т.д.

 

Font: задает шрифт для всей формы и всех помещенных на нее элементов управления. Однако, задав у элементов формы свой шрифт, мы можем тем самым переопределить его

 

ForeColor: цвет шрифта на форме

 

FormBorderStyle: указывает, как будет отображаться граница формы и строка заголовка. Устанавливая данное свойство в None можно создавать внешний вид приложения произвольной формы

 

HelpButton: указывает, отображается ли кнопка справки формы

 

Icon: задает иконку формы

 

Location: определяет положение по отношению к верхнему левому углу экрана, если для свойства StartPosition установлено значение Manual

 

MaximizeBox: указывает, будет ли доступна кнопка максимизации окна в заголовке формы

MinimizeBox: указывает, будет ли доступна кнопка минимизации окна

 

MaximumSize: задает максимальный размер формы

 

MinimumSize: задает минимальный размер формы

 

Opacity: задает прозрачность формы

 

Size: определяет начальный размер формы

 

StartPosition: указывает на начальную позицию, с которой форма появляется на экране

 

Text: определяет заголовок формы

 

TopMost: если данное свойство имеет значение true, то форма всегда будет находиться поверх других окон

 

Visible: видима ли форма, если мы хотим скрыть форму от пользователя, то можем задать данному свойству значение false

 

WindowState: указывает, в каком состоянии форма будет находиться при запуске: в нормальном, максимизированном или минимизированном

 

С помощью значений свойств в окне Свойства мы можем изменить по своему усмотрению внешний вид формы, однако все тоже самое можем сделать в динамическом коде.

Перейдем к коду основной формы, дважды кликнув по ней. В появившемся окне пропишем:

 

Для установки размеров формы можно использовать такие свойства как Width/Height или Size. Width/Height принимают числовые значения, как в вышеприведенном примере. При установке размеров через свойство Size, нам надо присвоить свойству объект типа Size:

Начальное расположение формы устанавливается с помощью свойства StartPosition, которое может принимать одно из следующих значений:

 

Manual: Положение формы определяется свойством Location

 

CenterScreen: Положение формы в центре экрана

 

WindowsDefaultLocation: Позиция формы на экране задается системой Windows, а размер определяется свойством Size

 

WindowsDefaultBounds: Начальная позиция и размер формы на экране задается системой Windows

 

CenterParent: Положение формы устанавливается в центре родительского окна

 

Все эти значения содержатся в перечислении FormStartPosition, поэтому, чтобы, например, установить форму в центре экрана, нам надо прописать так:

 

 

 

Фон и цвета формы

Чтобы установить цвет как фона формы, так и шрифта, нам надо использовать цветовое значение, хранящееся в структуре Color:

 

Кроме того, мы можем в качестве фона задать изображение в свойстве BackgroundImage, выбрав его в окне свойств или в коде, указав путь к изображению:

 

Вот что получилось вместе с рисунком:

 

Чтобы должным образом настроить нужное нам отображение фоновой картинки, надо использовать свойство BackgroundImageLayout, которое может принимать одно из следующих значений:

 

None: Изображение помещается в верхнем левом углу формы и сохраняет свои первоначальные значения

 

Tile: Изображение располагается на форме в виде мозаики

 

Center: Изображение располагается по центру формы

 

Stretch: Изображение растягивается до размеров формы без сохранения пропорций

 

Zoom: Изображение растягивается до размеров формы с сохранением пропорций


 

Добавление форм взаимодействие между ними.

 

Чтобы добавить еще одну форму в проект, необходимо в обозревателе решений ПКМ по имени проекта, в появившемся меню выбрать Добавить=> Форма(Windows Forms)...

 

в появившемся окне выбрать:

 

В наш проект добавлена вторая форма. Теперь осуществим взаимодействие между ними, для этого на первую форму добавим кнопку которая будет вызывать вторую форму.

Для этого, в коде кнопки необходимо прописать:

 

Теперь сделаем наоборот - чтобы вторая форма воздействовала на первую. Пока вторая форма не знает о существовании первой. Чтобы это исправить, надо второй форме как-то передать сведения о первой форме. Для этого воспользуемся передачей ссылки на форму в конструкторе.

 

Итак перейдем ко второй форме и перейдем к ее коду - нажмем правой кнопкой мыши на форму и выберем View Code (Просмотр кода). Пока он пустой и содержит только конструктор. Поскольку C# поддерживает перегрузку методов, то мы можем создать несколько методов и конструкторов с разными параметрами и в зависимости от ситуации вызывать один из них. Итак, изменим файл кода второй формы на следующий:

 

Фактически мы только добавили здесь новый конструктор public Form2(Form1 f), в котором мы получаем первую форму и устанавливаем ее фон в желтый цвет. Теперь перейдем к коду первой формы, где мы вызывали вторую форму и изменим его на следующий:

 

Поскольку в данном случае ключевое слово this представляет ссылку на текущий объект - объект Form1, то при создании второй формы она будет получать ее (ссылку) и через нее управлять первой формой.

 

Теперь после нажатия на кнопку у нас будет создана вторая форма, которая сразу изменит цвет первой формы.

 

Мы можем также создавать объекты и текущей формы:

 

При работе с несколькими формами надо учитывать, что одна из них является главной - которая запускается первой в файле Program.cs. Если у нас одновременно открыта куча форм, то при закрытии главной закрывается все приложение и вместе с ним все остальные формы.

 


 

Контейнеры в Windows Forms

 

Для организации элементов управления в связанные группы существуют специальные элементы - контейнеры. Например, Panel, FlowLayoutPanel, SplitContainer, GroupBox. Ту же форму также можно отнести к контейнерам. Использование контейнеров облегчает управление элементами, а также придает форме определенный визуальный стиль.

 

Все контейнеры имеют свойство Controls, которое содержит все элементы данного контейнера. Когда мы переносим какой-нибудь элемент с панели инструментов на контейнер, например, кнопку, она автоматически добавляется в данную коллекцию данного контейнера. Либо мы также можем добавить элемент управления динамически с помощью кода в эту же коллекцию.

 

TabControl

Элемент TabControl позволяет создать элемент управления с несколькими вкладками. И каждая вкладка будет хранить некоторый набор других элементов управления, как кнопки, текстовые поля и др. Каждая вкладка представлена классом TabPage.

 

Чтобы настроить вкладки элемента TabControl используем свойство TabPages. При переносе элемента TabControl с панели инструментов на форму по умолчанию создаются две вкладки - tabPage1 и tabPage2. Изменим их отображение с помощью свойства TabPages:

 

 

 

Управление вкладками в коде

 

Для добавления новой вкладки нам надо ее создать и добавить в коллекцию tabControl1.TabPages с помощью метода Add:

 


 

Элементы управления

Элементы управления представляют собой визуальные классы, которые получают введенные пользователем данные и могут инициировать различные события. Все элементы управления наследуются от класса Control и поэтому имеют ряд общих свойств:

 

Anchor: Определяет, как элемент будет растягиваться

 

BackColor: Определяет фоновый цвет элемента

 

BackgroundImage: Определяет фоновое изображение элемента

 

ContextMenu: Контекстное меню, которое открывается при нажатии на элемент правой кнопкой мыши. Задается с помощью элемента ContextMenu

 

Cursor: Представляет, как будет отображаться курсор мыши при наведении на элемент

 

Dock: Задает расположение элемента на форме

 

Enabled: Определяет, будет ли доступен элемент для использования. Если это свойство имеет значение False, то элемент блокируется.

 

Font: Устанавливает шрифт текста для элемента

 

ForeColor: Определяет цвет шрифта

 

Location: Определяет координаты верхнего левого угла элемента управления

 

Name: Имя элемента управления

 

Size: Определяет размер элемента

 

Width: ширина элемента

 

Height: высота элемента

 

TabIndex: Определяет порядок обхода элемента по нажатию на клавишу Tab

 

Tag: Позволяет сохранять значение, ассоциированное с этим элементом управления

 

КНОПКА

 

Наиболее часто используемым элементом управления является кнопка. Обрабатывая событие нажатия кнопки, мы может производить те или иные действия.

 

При нажатии на кнопку на форме в редакторе Visual Studio мы по умолчанию попадаем в код обработчика события Click, который будет выполняться при нажатии.

 

Оформление кнопки

Чтобы управлять внешним отображением кнопки, можно использовать свойство FlatStyle. Оно может принимать следующие значения:

 

Flat - Кнопка имеет плоский вид

 

Popup - Кнопка приобретает объемный вид при наведении на нее указателя, в иных случаях она имеет плоский вид

 

Standard - Кнопка имеет объемный вид (используется по умолчанию)

 

System - Вид кнопки зависит от операционной системы

 

Изображение на кнопке

Как и для многих элементов управления, для кнопки можно задавать изображение с помощью свойства BackgroundImage. Однако мы можем также управлять размещением текста и изображения на кнопки. Для этого надо использовать свойство TextImageRelation. Оно приобретает следующие значения:

 

Overlay: текст накладывается на изображение

 

ImageAboveText: изображение располагается над текстом

 

TextAboveImage: текст располагается над изображением

 

ImageBeforeText: изображение располагается перед текстом

 

TextBeforeImage: текст располагается перед изображением

 

Например, установим для кнопки изображение. Для этого выберем кнопку и в окне Свойств нажмем на поле Image (не путать с BackgroundImage). Нам откроется диалоговое окно установки изображения:

 

В этом окне выберем опцию Локальный ресурс и нажмем на кнопку Импорт, после чего нам откроется диалоговое окно для выбора файла изображения.

 

После выбора изображения мы можем установить свойство ImageAlign, которое управляет позиционированием изображения на кнопке:

 

 

Нам доступны 9 вариантов, с помощью которых мы можем прикрепить изображение к определенной стороне кнопки. Оставим здесь значение по умолчанию - MiddleCenter, то есть позиционирование по центру.

 

Затем перейдем к свойству TextImageRelation и установим для него значение ImageBeforeText. В итоге мы получим кнопку, где сразу после изображения идет надпись на кнопке:

 

 


 

Метки и ссылки

Label

Для отображения простого текста на форме, доступного только для чтения, служит элемент Label. Чтобы задать отображаемый текст метки, надо установить свойство Text элемента.

 

LinkLabel

Особый тип меток представляют элементы LinkLabel, которые предназначены для вывода ссылок, которые аналогичны ссылкам, размещенным на стандартных веб-станиц.

 

Также, как и с обычными ссылками на веб-страницах, мы можем по отношению к данному элементу определить три цвета:

 

Свойство ActiveLinkColor задает цвет ссылки при нажатии

 

Свойство LinkColor задает цвет ссылки до нажатия, по которой еще не было переходов

 

Свойство VisitedLinkColor задает цвет ссылки, по которой уже были переходы

 

Кроме цвета ссылки для данного элемента мы можем задать свойство LinkBehavior, которое управляет поведением ссылки. Это свойство принимает четыре возможных значения:

 

SystemDefault: для ссылки устанавливаются системные настройки

 

AlwaysUnderline: ссылка всегда подчеркивается

 

HoverUnderline: ссылка подчеркивается только при наведении на нее курсора мыши

 

NeverUnderline: ссылка никогда не подчеркивается

 

По умолчанию весь текст на данном элементе считается ссылкой. Однако с помощью свойства LinkArea мы можем изменить область ссылки. Например, мы не хотим включать в ссылку первые шесть символов. Для этого задаем подсвойство Start:

 

 

Чтобы выполнить переход по ссылке по нажатию на нее, надо дополнительно написать код. Данный код должен обрабатывать событие LinkClicked, которое есть у элемента LinkLabel. Например, пусть у нас на форме есть элемент ссылки называется linkLabel1 и который содержит некоторую ссылку:

 

Чтобы перейти по ссылке надо создать обработчик

 

Метод System.Diagnostics.Process.Start() откроет данную ссылку в веб-браузере, который установлен в системе браузером по умолчанию.

 


 

Текстовое поле TextBox

Для ввода и редактирования текста предназначены текстовые поля - элемент TextBox. Так же как и у элемента Label текст элемента TextBox можно установить или получить с помощью свойства Text.

 

По умолчанию при переносе элемента с панели инструментов создается однострочное текстовое поле. Для отображения больших объемов информации в текстовом поле нужно использовать его свойства Multiline и ScrollBars. При установке для свойства Multiline значения true, все избыточные символы, которые выходят за границы поля, будут переноситься на новую строку.

 

Кроме того, можно сделать прокрутку текстового поля, установив для его свойства ScrollBars одно из значений:

 

None: без прокруток (по умолчанию)

 

Horizontal: создает горизонтальную прокрутку при длине строки, превышающей ширину текстового поля

 

Vertical: создает вертикальную прокрутку, если строки не помещаются в текстовом поле

 

Both: создает вертикальную и горизонтальную прокрутку

 

 

Автозаполнение текстового поля

 

Элемент TextBox обладает достаточными возможностями для создания автозаполняемого поля. Для этого нам надо привязать свойство AutoCompleteCustomSource элемента TextBox к некоторой коллекции, из которой берутся данные для заполнения поля.

 

Итак, добавим на форму текстовое поле и пропишем в код события загрузки следующие строки:

 

 

 

Режим автодополнения, представленный свойством AutoCompleteMode, имеет несколько возможных значений:

 

None: отсутствие автодополнения

 

Suggest: предлагает варианты для ввода, но не дополняет

 

Append: дополняет введенное значение до строки из списка, но не предлагает варианты для выбора

 

SuggestAppend: одновременно и предлагает варианты для автодополнения, и дополняет введенное пользователем значение

 

Перенос по словам

Чтобы текст в элементе TextBox переносился по словам, надо установить свойство WordWrap равным true. То есть если одно слово не умещается на строке, то но переносится на следующую. Данное свойство будет работать только для многострочных текстовых полей.

 

Ввод пароля

Также данный элемент имеет свойства, которые позволяют сделать из него поле для ввода пароля. Так, для этого надо использовать PasswordChar и UseSystemPasswordChar.

 

Свойство PasswordChar по умолчанию не имеет значение, если мы установим в качестве него какой-нибудь символ, то этот символ будут отображаться при вводе любых символов в текстовое поле.

 

Свойство UseSystemPasswordChar имеет похожее действие. Если мы установим его значение в true, то вместо введенных символов в текстовом поле будет отображаться знак пароля, принятый в системе, например, точка.

 

Событие TextChanged

Из всех событий элемента TextBox следует отметить событие TextChanged, которое срабатывает при изменении текста в элементе. Например, поместим на форму кроме текстового поля метку и сделаем так, чтобы при изменении текста в текстовом поле также менялся текст на метке:

 

 


 

Элемент MaskedTextBox

Элемент MaskedTextBox по сути представляет обычное текстовое поле. Однако данные элемент позволяет контролировать ввод пользователя и проверять его автоматически на наличие ошибок.

 

Чтобы контролировать вводимые в поле символы, надо задать маску. Для задания маски можно применять следующие символы:

 

0: Позволяет вводить только цифры

 

9: Позволяет вводить цифры и пробелы

 

#: Позволяет вводить цифры, пробелы и знаки '+' и '-'

 

L: Позволяет вводить только буквенные символы

 

?: Позволяет вводить дополнительные необязательные буквенные символы

 

A: Позволяет вводить буквенные и цифровые символы

 

.: Задает позицию разделителя целой и дробной части

 

,: Используется для разделения разрядов в целой части числа

 

:: Используется в временных промежутках - разделяет часы, минуты и секунды

 

/: Используется для разделения дат

 

$: Используется в качестве символа валюты

 

Чтобы задать маску, надо установить свойство Mask элемента. Найдя это свойство в окне свойств(Porperties), нажмем на него и нам отобразится окно для задания одного из стандартных шаблонов маски. В частности мы можем выбрать Phone number (Телефонный номер), который подразумевает ввод в текстовое поле только телефонного номера:

 

 

Теперь при запуске мы сможем ввести в текстовое поле только цифры, получив в итоге телефонный номер.

 

Теперь сделаем свою маску. Например, создадим маску для ввода инициалов имени и отчества и фамилий ограниченной длины в текстовое поле. Для этого присвоим свойству Mask значение L.L.L?????????. Тогда ввод в текстовое поле будет выглядеть следующим образом:

 

 

Данный элемент также представляет нам ряд свойств, которые можно использовать для управления вводом. Так, свойство BeepOnError при установке значения true подает звуковой сигнал при введении некорректного символа.

 

Свойство HidePromptOnLeave при установке в true при потери текстовым полем фокуса скрывает, указанные в PromptChar

 

Свойство PromptChar указывает на символ, который отображается в поле на месте ввода символов. По умолчанию стоит знак подчеркивания.

 

Свойство AsciiOnly при значении true позволяет вводить только asci-символы, то есть символы из диапазона A-Z и a-z.

 


 

Radiobutton

На элемент CheckBox похож элемент RadioButton или переключатель. Переключатели располагаются группами, и включение одного переключателя означает отключение всех остальных.

 

Чтобы установить у переключателя включенное состояние, надо присвоить его свойству Checked значение true.

 

Для создания группы переключателей, из которых можно бы было выбирать, надо поместить несколько переключателей в какой-нибудь контейнер, например, в элементы GroupBox или Panel. Переключатели. находящиеся в разных контейнерах, будут относиться к разным группам:

 

Похожим образом мы можем перехватывать переключение переключателей в группе, обрабатывая событие CheckedChanged. Связав каждый переключатель группы с одним обработчиком данного события, мы сможем получить тот переключатель, который в данный момент выбран:

 


 

ListBox

Элемент ListBox представляет собой простой список. Ключевым свойством этого элемента является свойство Items, которое как раз и хранит набор всех элементов списка.

 

Элементы в список могут добавляться как во время разработки, так и программным способом. В Visual Studio в окне Properties (Свойства) для элемента ListBox мы можем найти свойство Items. После двойного щелчка на свойство нам отобразится окно для добавления элементов в список:

 

В пустое поле мы вводим по одному элементу списка - по одному на каждой строке. После этого все добавленные нами элементы окажутся в списке, и мы сможем ими управлять:

 

Программное управление элементами в ListBox

Добавление элементов

Итак, все элементы списка входят в свойство Items, которое представляет собой коллекцию. Для добавления нового элемента в эту коллекцию, а значит и в список, надо использовать метод Add, например: listBox1.Items.Add("Новый элемент");. При использовании этого метода каждый добавляемый элемент добавляется в конец списка.

 

Можно добавить сразу несколько элементов, например, массив. Для этого используется метод AddRange:

 

 

Вставка элементов

В отличие от простого добавления вставка производится по определенному индексу списка с помощью метода Insert:

 

 

В данном случае вставляем элемент на вторую позицию в списке, так как отсчет позиций начинается с нуля.

 

Удаление элементов

Для удаления элемента по его тексту используется метод Remove:

Чтобы удалить элемент по его индексу в списке, используется метод RemoveAt.

Кроме того, можно очистить сразу весь список, применив метод Clear.

 

Выделение элементов списка

При выделении элементов списка мы можем ими управлять как через индекс, так и через сам выделенный элемент. Получить выделенные элементы можно с помощью следующих свойств элемента ListBox:

 

SelectedIndex: возвращает или устанавливает номер выделенного элемента списка. Если выделенные элементы отсутствуют, тогда свойство имеет значение -1

 

SelectedIndices: возвращает или устанавливает коллекцию выделенных элементов в виде набора их индексов

 

SelectedItem: возвращает или устанавливает текст выделенного элемента

 

SelectedItems: возвращает или устанавливает выделенные элементы в виде коллекции

 

По умолчанию список поддерживает выделение одного элемента. Чтобы добавить возможность выделения нескольких элементов, надо установить у его свойства SelectionMode значение MultiSimple.

 

Чтобы выделить элемент программно, надо применить метод SetSelected(int index, bool value), где index - номер выделенного элемента. Если второй параметр - value имеет значение true, то элемент по указанному индексу выделяется, если false, то выделение наоборот скрывается:

 

Чтобы снять выделение со всех выделенных элементов, используется метод ClearSelected.

 

Событие SelectedIndexChanged

Из всех событий элемента ListBox надо отметить в первую очередь событие SelectedIndexChanged, которое возникает при изменении выделенного элемента:

В данном случае по выбору элемента списка будет отображаться сообщение с выделенным элементом.


 

Элемент ComboBox

Элемент ComboBox образует выпадающий список и совмещает функциональность компонентов ListBox и TextBox. Для хранения элементов списка в ComboBox также предназначено свойство Items.

 

Подобным образом, как и с ListBox, мы можем в окне свойств на свойство Items и нам отобразится окно для добавления элементов ComboBox.

 

И как и с компонентом ListBox, здесь мы также можем программно управлять элементами.

 

Добавление элементов:

 

 

При добавлении с помощью методов Add / AddRange все новые элементы помещаются в конец списка. Однако если мы зададим у ComboBox свойство Sorted равным true, тогда при добавлении будет автоматически производиться сортировка.

 

Мы можем получить элемент по индексу и производить с ним разные действия. Например, изменить его:

 

 

 

Настройка оформления ComboBox

С помощью ряда свойств можно настроить стиль оформления компонента. Так, свойство DropDownWidth задает ширину выпадающего списка. С помощью свойства DropDownHeight можно установить высоту выпадающего списка.

 

Еще одно свойство MaxDropDownItems позволяет задать число видимых элементов списка - от 1 до 100. По умолчанию это число равно 8.

 

Другое свойство DropDownStyle задает стиль ComboBox. Оно может принимать три возможных значения:

 

Dropdown: используется по умолчанию. Мы можем открыть выпадающий список вариантов при вводе значения в текстовое поле или нажав на кнопку со стрелкой в правой части элемента, и нам отобразится собственно выпадающий список, в котором можно выбрать возможный вариант

 

DropdownList: чтобы открыть выпадающий список, надо нажать на кнопку со стрелкой в правой стороне элемента

 

Simple: ComboBox представляет простое текстовое поле, в котором для перехода между элементами мы можем использовать клавиши клавиатуры вверх/вниз.

 

Событие SelectedIndexChanged

Наиболее важным событием для ComboBox также является событие SelectedIndexChanged, позволяющее отследить выбор элемента в списке:

 

 

 

Здесь также свойство SelectedItem будет ссылаться на выбранный элемент.

 

 

Основы форм

 

 

Внешний вид приложения является нам преимущественно через формы. Формы являются основными строительными блоками. Они предоставляют контейнер для различных элементов управления. А механизм событий позволяет элементам формы отзываться на ввод пользователя, и, таким образом, взаимодействовать с пользователем.

 

При открытии проекта в Visual Studio в графическом редакторе мы можем увидеть визуальную часть формы - ту часть, которую мы видим после запуска приложения и куда мы переносим элементы с панели управления. Но на самом деле форма скрывает мощный функционал, состоящий из методов, свойств, событий и прочее. Рассмотрим основные свойства форм.

 

Если мы запустим приложение, то нам отобразится одна пустая форма. Однако даже такой простой проект с пустой формой имеет несколько компонентов:

 

App.config - файл конфигурации приложения.

Form1.Desinger.cs - Дизайнер формы на C#.

Form1.resx - Ресурсы формы.

Program.cs - Точка входа в программу.

 

Не смотря на то что мы видим только форму но стартовой точкой входа в графическое приложение является класс Program, расположенный в файле Program.cs:

 

Сначала программой запускается данный класс, затем с помощью выражения Application.Run(new Form1()) он запускает форму Form1. Если вдруг мы захотим изменить стартовую форму в приложении на какую-нибудь другую, то нам надо изменить в этом выражении Form1 на соответствующий класс формы.

 

Сама форма сложна по содержанию. Она делится на ряд компонентов. Так, в структуре проекта есть файл Form1.Designer.cs, который выглядит примерно так:

___________________________________________________________________________

Namespace WindowsFormsApp4

{

partial class Form1

{

   /// <summary>

   /// Обязательная переменная конструктора.

   /// </summary>

   private System.ComponentModel.IContainer components = null;

   /// <summary>

   /// Освободить все используемые ресурсы.

   /// </summary>

   /// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>

   protected override void Dispose(bool disposing)

   {

       if (disposing && (components!= null))

       {

           components.Dispose();

       }

       base.Dispose(disposing);

   }

   #region Код, автоматически созданный конструктором форм Windows

    /// <summary>



Поделиться:


Последнее изменение этой страницы: 2021-02-07; просмотров: 1609; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.11.89 (0.519 с.)