Учебное пособие (1077022), страница 27
Текст из файла (страница 27)
Что такое расстояние Левенштейна?2. Что такое расстояние Дамерау-Левенштейна?2183. ОбъяснитеалгоритмВагнера-Фишерадлявычислениярасстояния Дамерау-Левенштейна.11 ОсновыинтерфейсаразработкиспользовательскогоиспользованиемтехнологииWindows FormsВ предыдущих примерах данного пособия создавались консольныеприложения.
В данном разделе рассмотрим основы создания оконныхприложений на основе фрагментов примера 17.11.1 Создание проектаДля создания оконного приложения необходимо создать в VisualStudio новый проект типа «приложение Windows Forms» (рис. 28).Рис. 28. Создание приложения Windows Forms.После этого открывается не окно кода, как было ранее в случаеконсольных приложений, а редактор макета формы, и автоматическисоздается форма Form1.219При нажатии на вкладку «Панель элементов», расположенную в левойчасти окна, открывается панель, содержащая список элементов, которыеможно перетащить на форму мышью (рис.
29).Рис. 29. Пример панели элементов.Все элементы делятся на визуальные и невизуальные. Визуальныеэлементы отображаются на форме в виде элементов управления. Это такиеэлементы как кнопка (Button), поле ввода (TextBox), текстовая надпись(Label) и другие.Невизуальные элементы также можно перетащить на форму, однакоони отображаются в специальной области редактора макета формы.Примером такого элемента является таймер (Timer).Если какая-либо из панелей не видна в текущей настройке VisualStudio, то ее можно включить в пункте меню «Вид» (в англоязычнойверсии «View»).Панель элементов содержит десятки элементов, работа с которымидетально рассмотрена в [1]. В том числе это элементы из группы220«Данные», позволяющие достаточно быстро разрабатывать макетыприложений на основе реляционной СУБД.Ниже мы разберем только основы работы с элементами управления наоснове наиболее часто используемых элементов.11.2 Пример работы с кнопкой и текстовым полемПеретащим в текущее окно элементы Button, TextBox, Label и Timer.Их можно свободно перемещать мышью на форме.
Элемент Timerотображается не на форме, а в отдельной нижней части конструктора.Выделим элемент Label. В правой нижней части окна Visual Studioотображается панель свойств (рис. 30).В панели свойств отображаются свойства текущего выделенногоэлемента Label. Изменим свойство «Text» на «Текст по нажатию кнопки».Для элемента Button изменим свойство «Text» на «Тест».Отметим, что в данном примере не изменяются стандартные именаэлементов управления, они называются button1, textBox1 и т.д. Имяэлемента управления можно изменить с помощью свойства Name.Имена элементов управления рекомендуется менять сразу послеперетаскивания на форму, так как используются в автоматическигенерируемых именах методов.221Рис.
30. Пример панели свойств.В панели свойств используются кнопки, описание которых приведенов таблице 7.Таблица 7Кнопки панели свойствКнопкаОписаниеПереключение к списку свойств элементаПереключение к списку событий элементаСортировка текущего списка свойств (событий) покатегориямСортировка текущего списка свойств (событий) поалфавиту по названиям свойств (событий)Осуществим двойное нажатие левой клавишей мыши на кнопкеButton.
При этом будет автоматически сформирован обработчик события222нажатия на кнопку (button1_Click) и откроется окно редактированияобработчика события (рис. 31).Рис. 31. Обработчик события нажатия на кнопку.С точки зрения языка C# форма «Form1» представляет собой класс,унаследованный от класса Form (расположен в пространстве именSystem.Windows.Forms). Обработчики событий добавляются в данныйкласс как методы. Отметим, что данный класс объявлен как частичный(partial), а в конструкторе вызывается метод InitializeComponent, который вданном файле не объявлен.
Значит, в другом файле должна быть еще одначасть данного класса. Если на методе InitializeComponent нажать правуюкнопку мыши и выбрать пункт меню «Перейти к определению» то будетоткрыт файл Form1.Designer.cs, который содержит вторую, автоматическисгенерированную часть класса Form1. Текст файла Form1.Designer.cs:namespace WindowsFormsApplication1{partial class Form1{223/// <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.textBox1 = new System.Windows.Forms.TextBox();this.label1 = new System.Windows.Forms.Label();this.SuspendLayout();//// button1//this.button1.Location = new System.Drawing.Point(472, 15);this.button1.Name = "button1";this.button1.Size = new System.Drawing.Size(75, 23);this.button1.TabIndex = 0;this.button1.Text = "Тест";this.button1.UseVisualStyleBackColor = true;this.button1.Click += newSystem.EventHandler(this.button1_Click);//// textBox1//this.textBox1.Location = new System.Drawing.Point(157, 17);this.textBox1.Name = "textBox1";this.textBox1.Size = new System.Drawing.Size(309, 20);this.textBox1.TabIndex = 1;//// label1//this.label1.AutoSize = true;this.label1.Location = new System.Drawing.Point(12, 20);this.label1.Name = "label1";224this.label1.Size = new System.Drawing.Size(139, 13);this.label1.TabIndex = 2;this.label1.Text = "Текст по нажатию кнопки";//// Form1//this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.ClientSize = new System.Drawing.Size(591, 262);this.Controls.Add(this.label1);this.Controls.Add(this.textBox1);this.Controls.Add(this.button1);this.Name = "Form1";this.Text = "Form1";this.ResumeLayout(false);this.PerformLayout();}#endregionprivate System.Windows.Forms.Button button1;private System.Windows.Forms.TextBox textBox1;private System.Windows.Forms.Label label1;}}В данном файле в виде private-полей объявлены элементы управления,добавленные на форму: button1, timer1, textBox1, label1.ВметодеInitializeComponentзадаютсясвойстваобъектов,установленные в панели свойств: расположение на форме (Location),текстовая подпись (Text) и др.Обработчик события button1_Click прикрепляется к настоящемусобытию, расположенному в классе Button (точнее в классе Control, откоторого наследуется Button).
Таким образом, рассмотренный ранеемеханизм событий используется в технологии Windows Forms.С использованием файла Form1.Designer.cs связана одна неочевиднаяособенность, которая часто проблему в начале изучения технологииWindows Forms. Дело в том, что если для элемента управления былисозданы свойства и события, а потом он был переименован, то файлForm1.Designer.cs не перегенерируется.
При компиляции это может225приводить к ошибкам в файле Form1.Designer.cs, что требует исправленияфайла Form1.Designer.cs вручную.Добавим в обработчик события button1_Click следующий код:private void button1_Click(object sender, EventArgs e){//Запись текста в текстовое полеtextBox1.Text = "Кнопка нажата";//Окно сообщенияMessageBox.Show("Кнопка нажата");}При нажатии на кнопку выполняется запись текста «Кнопка нажата» втекстовое поле, при этом используется свойство Text текстового поляtextBox1. Отметим, что возможно изменение практически любого свойстваэлемента, в том числе цвета, шрифта, положения на форме и т.д.СпомощьюметодаShowстатическогоклассаMessageBoxосуществляется вывод окна сообщения.
Окна сообщений в частностиудобны для вывода сообщений об ошибках.Нажмем на кнопку «Тест». Результат выполнения этого действияпоказан на рис 32.Рис. 32. Обработчик события нажатия на кнопку.11.3 Пример работы с таймеромДобавим на форму следующие элементы (в скобках заданы значениясвойств, которые требуется установить):226 Label (Text = «Таймер:»); TextBox (Name = «textTimer»); Button (Name = «buttonStartTimer», Text = «Старт»); Button (Name = «buttonStopTimer», Text = «Стоп»); Button (Name = «buttonClearTimer», Text = «Сброс»); Timer (Name = «timer1», Interval = «1000»).Элемент Timer с именем timer1 был уже ранее добавлен на форму, длянего необходимо установить только свойство Interval.Общий вид формы в конструкторе форм показан на рис.
33.Рис. 33. Форма с добавлением таймера.Свойство Interval=«1000» для таймера означает, что таймер будетсрабатывать один раз в секунду (1000 мс).Осуществим двойное нажатие левой клавишей мыши на таймере итрех добавленных кнопках, будут сгенерированы соответствующиеобработчики событий, которые пока не содержат код:private void timer1_Tick(object sender, EventArgs e){}227private void buttonStartTimer_Click(object sender, EventArgs e){}private void buttonStopTimer_Click(object sender, EventArgs e){}private void buttonClearTimer_Click(object sender, EventArgs e){}С точки зрения языка C# файл с описанием обработчиков событий –обычный класс, поэтому в него можно добавлять поля данных, свойства,методы.При разработке приложений необходимо реализовывать сложныеалгоритмы в виде отдельных классов и из форм осуществлять только ихвызов.















