
- •Камышинский технологический институт (филиал) Волгоградского государственного технического университета
- •Введение.
- •1.Задания на проведение лабораторной работы
- •2. Контрольные вопросы.
- •3. Описание работы.
- •Формирование проекта.
- •Компоненты управления диалогом
- •Свойства компонентов
- •Проектирование главной формы приложения "Компоненты".
- •Кнопка "Список"
- •Список имен файлов "Files"
- •Кнопка "ок"
- •Кнопка "Cancel"
- •4. Отчет по лабораторной работе
- •5. Литература
Кнопка "Список"
Эта управляющая кнопка предназначена для заполнения окна компоненты Files, расположенной на форме под надписью "Список файлов", именами файлов с расширением, указанным переключателем txt или переключателем doc и расположенными в директории, путь которой указан в поле Путь. Для того, чтобы это заполнение произошло, необходимо эту кнопку выбрать, то есть щелкнуть на ней левой клавишей мышки или клавишей Tab подвести подсветку на эту кнопку и нажать на клавиатуре клавишу Enter.
Для удобства работы с приложением обеспечим автоматическое заполнение поля Путь некоторым значением по умолчанию, например, значением "D:\Study", для чего введем этот текст в качестве значения в строку Text в списке свойств компоненты PFile. При этом в директорию "D:\Study" необходимо перенести хотя бы по одному файлу с расширением txt и doc. В принципе, вместо папки "D:\Study" можно использовать любую другую папку. Кроме автоматического заполнения поля Путь надо установить по умолчанию в состояние "установлено" какой-нибудь из переключателей, например, переключатель doc. Для этого в списке свойств компоненты Pdoc в строке Checked надо установить значение true.
При выборе кнопки Список в системе возникает соответствующее событие, в ответ на которое нужно запустить соответствующий программный код. Задачей этого программного кода является выполнить все действия по заполнению окна компоненты Files именами файлов, как об этом было сказано выше. Указанный программный код называется обработчиком рассматриваемого события. Это событие в используемой нами системе программирования на языке C# является предопределенным, то есть заложенным в систему разработчиками в описании классов каждой компоненты, где оно имеет смысл. Имя этого события Click. Событие Click заложено и в описание класса компоненты типа button, каковой является кнопка Список.
Обработчик события это метод, добавляемый в описание класса, в экземпляре которого это событие должно обрабатываться. Описание такого метода осуществляется программистом. Обработчик события должен иметь два аргумента. Первый аргумент указывает на объект – источник события, а второй указывает на информацию, которая сопровождает событие. Ниже приведен пример обработчика события, связанного с выбором кнопки щелком левой клавишей мышки или нажатием клавиши Enter.
private void Spisok_Click(object sender, EventArgs e)
{
Программный код процедуры обработки
}
Здесь Spisok_Click это имя обработчика, как мы его назвали, sender это ссылка на объект – источник события (в данном случае это описание компоненты Список), а e это ссылка на экземпляр объекта класса EventArgs, в котором содержится информация, сопровождающая это событие (координаты указателя мышки и ее клавиша, которую нажали).
Для улавливания событий в языке C# используется механизм делегатов. Делегат это объект, объявляемый как член класса, где он используется, и ссылающийся на особый метод, который определяется не в момент компиляции программы приложения, а во время ее выполнения. Вот пример объявления делегата:
public delegate void ИмяДелегата(object источник, MyEventArgs arg);
Здесь ИмяДелегата это имя делегата, а источник и e – аргументы делегата. Чтобы объявить событие нужно воспользоваться соответствующим делегатом:
public event ИмяДелегата ИмяСобытия;
Теперь, чтобы инициировать событие, необходимо выполнить код
ИмяСобытия (this, e);
предварительно задав конкретное значение переменной e, которая должна являться экземпляром класса MyEventArgs.
Объявления делегата и события, а также инициирование события осуществляется в его источнике. В нашем случае это делается в компоненте, предназначенной для реализации поведения кнопки Список. Код класса, реализующего это поведение, от нас скрыт, поэтому в дальнейшем мы не будем углубляться в эту тему. Сейчас нас будет интересовать, как описать реакцию на возникшее событие Click, которое было инициировано компонентой Spisok кнопки Список, и передать управление обработчику этого события Spisok_Click в случае его возникновения. Для этого обеспечим на панели формы/кода отображение содержимого файла GlForm.cs[Design}, а затем двойным щелчком левой клавиши мышки щелкнем на кнопке Список. В результате этих действий на экране появится содержимое файла GlForm.cs. В этом файле в процессе формирования проекта автоматически была создана заготовка части описания класса GlForm. На это указывает модификатор partial. И теперь там появилась заготовка для обработчика события, связанного с выбором кнопки Список
в виде
private void Spisok_Click(object sender, EventArgs e)
{
}
Как видим, этому обработчику присвоено имя Spisok_Click. Одновременно в файле GlForm.Designer.cs, содержимое которого есть вторя часть описания класса GlForm., в группе строк кода, относящейся к компоненте Spisok, появилась строка
this.Spisok.Click += new System.EventHandler(this.Spisok_Click);
предназначенная для улавливания события Click и привязки этого события к обработику с именем Spisok_Click.
Ниже приведен программный код, реализующий обработку события Spisok.Click:
string [] fl;//Коллекция имен файлов,выбранных при нажатии кнопки Список
string Pt = PFile.Text; //Путь к директории, откуда выбираются файлы
string rs = "*.txt"; //Маска для выбора файлов из директории Pt
if (Pt == "") return; //Если PFile.Text не задан
Filels.Items.Clear(); //Очистка списка имен файлов в окне компоненты Files
if (!Ptxt.Checked) rs = "*.doc";//Если переключатель Ptxt не выбран
fl=System.IO.Directory.GetFiles(Pt,rs);//Выбор файлов из директории Pt
if(fl.Length == 0) return; //Если не выбрано ни одного файла
//Замена в массиве fl полных путей файов на их имена с расширениями
for (int i = 0; i < fl.Length;
fl[i] = System.IO.Path.GetFileName(fl[i]), i++) ;
Filels.Items.AddRange(fl);//Перенос имен файлов из fl в компоненту Filels
Введите этот код и запустите программу на выполнение. Рекомендуется этот код вводить вручную, а не путем переноса его в программу через ClipBoаrd. Только, если вводить вручную можно добиться глубокого понимания того, как программа строилась, и запоминания технологии программирования обработчиков событий.