Главная страница
Навигация по странице:

  • Группо- вой делегат содержит список связанных с ним методов

  • Описание формы приложения

  • Label1, свойство Значение

  • Button1, свойство Значение

  • Button2, свойство Значение

  • Разработка gui. Создание sdiприложений обработка событий


    Скачать 361.78 Kb.
    НазваниеРазработка gui. Создание sdiприложений обработка событий
    Дата14.10.2022
    Размер361.78 Kb.
    Формат файлаdocx
    Имя файла14.10.docx
    ТипЛабораторная работа
    #733575
    страница3 из 7
    1   2   3   4   5   6   7

    Обработка событий в Windows Forms


    GUI управляется событиями. Приложение выполняет действия в ответ на события, вызванные пользователем, например, на щелчок кнопкой мыши или выбор пункта меню. В 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

    Описание формы приложения

    Форма, свойства

    Значение

    FormBorderStyle

    Fixed3D

    Icon

    Путь С:\Program Files\Microsoft Visual Studio 8\ Common7\ VS2008ImageLibrary\icons\....

    Text

    Социологический опрос

    Label1, свойство

    Значение

    Bold

    True

    Text

    Вы довольны своей зарплатой?

    Button1, свойство

    Значение

    Name

    Btnyes

    Text

    Да

    О к о н ч а н и е т а б л . 3.4


    Форма, свойства

    Значение

    Button2, свойство

    Значение

    Name

    Btnno

    Text

    Нет


    Щелкаем дважды по кнопке "Да". В обработчике этой кнопки вставляем следующий код:

    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;

    }

    1   2   3   4   5   6   7


    написать администратору сайта