Разработка gui. Создание sdiприложений обработка событий
Скачать 361.78 Kb.
|
Обработка событий в Windows FormsGUI управляется событиями. Приложение выполняет действия в ответ на события, вызванные пользователем, например, на щелчок кнопкой мыши или выбор пункта меню. В Windows Forms применяет- ся модель обработки событий .NET, в которой делегаты используются для того, чтобы связать события с обрабатывающими их методами. В классах Windows Forms используются групповые делегаты. Группо- вой делегат содержит список связанных с ним методов. Когда в приложении происходит событие, управляющий элемент возбуждает событие, вызвав делегат для этого события, который вызывает связан- ные с ним методы. Для того чтобы добавить делегат к событию, ис- пользуется перегруженный оператор +=. Например: this.MouseClick += new MouseEventHandler(this.Form1_MouseClick); Объявление обработчика для этого события: private void Form1_MouseClick(object sender, MouseEventArgs e) { } В качестве параметра обработчик событий получает объект класса МоuseEventArgs (производный от класса EventArgs). Свойства этого объекта содержат информацию, связанную с данным событием. Button (Кнопка) определяет, какая кнопка была нажата; Clicks (Щелчки) определяет, сколько раз была нажата и отпуще- на кнопка; свойство Delta (Дельта) является счетчиком оборотов колесика мыши; X и Y – координаты точки, в которой находился указатель в мо- мент нажатия кнопки мыши. Внесем изменения в FirstForm, чтобы при щелчке кнопкой мыши строка с приветствием перемещалась на место щелчка. Программа 1. Отображает перемещение приветствия по щелчку мыши. public partial class Form1 : Form { float x, y; // координаты Brush pStdBrush; // Кисть Graphics poGraphics; public Form1() { InitializeComponent(); x=10; y=20; pStdBrush = new SolidBrush(Color.Black); poGraphics = this.CreateGraphics(); this.Text = "Программа 1"; this.Show(); poGraphics.DrawString("Hello, Window Forms", this.Font, pStdBrush, x, y); } private void Form1_MouseClick(object sender, MouseEventArgs e) { // координаты точки щелчка мыши x = (float)e.X; y = (float)e.Y; poGraphics.DrawString("Hello, Window Forms", this.Font, pStdBrush, x, y); } } Параметры метода DrawString: выводимая строка; шрифт (Font— свойство класса Form, которое определяет шрифт, по умолчанию применяемый для вывода текста в форму); используемая кисть; координаты в пикселях. Метод Form1_MouseClick устанавливает координаты текста х и у, равными координатам точки, в которой находился указатель в момент щелчка. Несколько обработчиков для события. Реализуем два обработчи- ка события MouseClick. Второй обработчик по щелчку кнопкой мыши просто отображает окно сообщения. Метод ShowClick подключается к событию вручную аналогично методу Form1_MouseClick в файле Form1.Designer.cs. Программа 2. Два обработчика событий для MouseClick public partial class Form1 : Form { . . . private void Form1_MouseClick(object sender, MouseEventArgs e) { x = (float)e.X; y = (float)e.Y; poGraphics.DrawString("Hello, Window Forms", this.Font, pStdBrush, x, y); } void ShowClick (object pSender, MouseEventArgs e) MessageBox.Show("Mouse clicked!!'"); } Введем в пример обработку события KeyPress, а также покажем, как в событии MouseDown различать, какая кнопка была нажата: левая или правая (программа 3). Обработка событий от правой и левой кнопки мыши. Для того чтобы определить, какая кнопка мыши была нажата, используем свой- ство Button параметра MouseEventArgs. Перепишем методы обработ- чика событий: private void Form1_MouseClick(object sender, MouseEventArgs e) { // если левая кнопка if (e.Button == System.Windows.Forms.MouseButtons.Left) { x = (float)e.X; y = (float)e.Y; poGraphics.DrawString("Hello, Window Forms", this.Font, pStdBrush, x, y); } } void ShowClick (object pSender, MouseEventArgs e) { // если правая кнопка if (e.Button == System.Windows.Forms.MouseButtons.Right) MessageBox.Show("Mouse clicked!!'"); } Событие Keypress. При нажатии пользователем на клавишу кла- виатуры в конец строки приветствия будет добавлен соответствующий символ. Вместо класса String используется класс StringBuilder, кото- рый более эффективен в этой ситуации. public partial class Form1 : Form { StringBuilder pStr; String s; public Form1() { . . . pStr = new StringBuilder("Hello, Window Forms"); s = pStr.ToString(); poGraphics.DrawString(s, this.Font, pStdBrush, x, y); } private void Form1_KeyPress(object sender, KeyPressEventArgs e) { pStr.Append(e.KeyChar); // Добавляем в конец s = pStr.ToString(); poGraphics.DrawString(s, this.Font, pStdBrush, x, y); } } Программа 4. Создадим шуточную программу, представляющую собой диалоговое окно с двумя кнопками. Назовем его SocOpros. Из окна Toolbox перетаскиваем на форму две кнопки Button и надпись Label и устанавливаем следующие свойства элементов управления и формы (табл. 3.4). Т а б л и ц а 3.4 Описание формы приложения
О к о н ч а н и е т а б л . 3.4
Щелкаем дважды по кнопке "Да". В обработчике этой кнопки вставляем следующий код: void btnyes_Click(object sender, EventArgs e){ MessageBox.Show("Мы и не сомневались, что Вы так думаете!"); } Выделяем кнопку "Нет". Открываем окно Properties. Переключаем- ся в окно событий и дважды щелкаем в поле MouseMove. В обработчике связываем движение мыши с координатами кнопки и устанавливаем координаты, куда она будет возвращаться, если во время своего движения выйдет за указанную область: private void Btnno_MouseMove(object sender, MouseEventArgs e) { Btnno.Top -= e.Y; Btnno.Left += e.X; if (Btnno.Top < -10 || Btnno.Top > 100) Btnno.Top = 60; if (Btnno.Left < -80 || Btnno.Left > 250) Btnno.Left = 120; } |