Как создать событие в windows forms

Последнее обновление: 31.10.2015

Для взаимодействия с пользователем в Windows Forms используется механизм событий. События в Windows Forms представляют стандартные события на C#, только
применяемые к визуальным компонентам и подчиняются тем же правилам, что события в C#. Но создание обработчиков событий в Windows Forms все же
имеет некоторые особенности.

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

События в Windows Forms

Чтобы добавить обработчик, можно просто два раза нажать по пустому полю рядом с названием события, и после этого Visual Studio
автоматически сгенерирует обработчик события. Например, нажмем для создания обработчика для события Load:

И в этом поле отобразится название метода обработчика события Load. По умолчанию он называется Form1_Load.

Если мы перейдем в файл кода формы Form1.cs, то увидим автосгенерированный метод Form1_Load:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }
}

И при каждой загрузке формы будет срабатывать код в обработчике Form1_Load.

Как правило, большинство обработчиков различных визуальных компонентов имеют два параметра: sender — объект, инициировавший событие,
и аргумент, хранящий информацию о событии (в данном случае EventArgs e).

Но это только обработчик. Добавление же обработчика, созданного таким образом, производится в файле Form1.Designer.cs:

namespace HelloApp
{
    partial class Form1
    {
        private System.ComponentModel.IContainer components = null;

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        private void InitializeComponent()
        {
            this.SuspendLayout();

            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(284, 261);
            this.Name = "Form1";
			// добавление обработчика 
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
        }
    }
}

Для добавления обработчика используется стандартный синтаксис C#: this.Load += new System.EventHandler(this.Form1_Load)

Поэтому если мы захотим удалить созданный подобным образом обработчик, то нам надо не только удалить метод из кода формы в Form1.cs, но и
удалить добавление обработчика в этом файле.

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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace HelloApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Load += LoadEvent;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        }

        private void LoadEvent(object sender, EventArgs e)
        {
            this.BackColor = Color.Yellow;
        }
    }
}

Кроме ранее созданного обработчика Form1_Load здесь также добавлен другой обработчик загрузки формы: this.Load += LoadEvent;, который
устанавливает в качестве фона желтый цвет.

I have a TextBox on a WinForm and I want to execute some code every time someone presses a key inside of that TextBox. I’m looking at the events properties menu, and see the KeyDown event, but don’t know how to add code to it.

pb2q's user avatar

pb2q

58.8k19 gold badges147 silver badges148 bronze badges

asked May 28, 2010 at 13:27

sooprise's user avatar

You need to add an event handler for that event. So in the properties menu, double-click on the field beside the KeyDown event and Visual Studio will create an event handler for you. It’ll look something like this:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    // enter your code here
}

You can also subscribe to events yourself without using the Properties window. For example, in the form’s constructor:

textBox1.KeyDown += HandleTextBoxKeyDownEvent;

And then implement the event handler:

private void HandleTextBoxKeyDownEvent(object sender, KeyEventArgs e)
{
    // enter your code here
}

answered May 28, 2010 at 13:32

Adam Lear's user avatar

Adam LearAdam Lear

38.2k12 gold badges81 silver badges101 bronze badges

1

These answers will have visual studio generate the event and bind it behind the scenes in the Designer.cs file.

If you want to know how to bind events yourself, it looks like this.

MyTextBox.KeyDown += new KeyEventHandler(MyKeyDownFunction)

private function MyKeyDownFunction(object sender, KeyEventArgs e) {
    // your code
}

If done this way, the new KeyEventHandler() part is optional. You can also use lambdas to avoid boilerplate code.

MyTextBox.KeyDown += (s, e) => {
    // s is the sender object, e is the args
}

answered May 28, 2010 at 13:33

Tesserex's user avatar

TesserexTesserex

17.2k5 gold badges67 silver badges106 bronze badges

1

Doubleclick the textfield next to it.

answered May 28, 2010 at 13:30

Femaref's user avatar

FemarefFemaref

60.8k7 gold badges138 silver badges176 bronze badges

I assume you are in Visual Studio. One way would be to double click on the empty textbox on the right of the KeyDown event: VS will generate the code for you.

answered May 28, 2010 at 13:30

Gad's user avatar

GadGad

41.6k13 gold badges55 silver badges78 bronze badges

You need to add a handler to the event.

Double-click the KeyPress event in the textbox’s Properties window to make Visual Studio generate an event handler in the code file.
You can then put any code you want to inside the event handler function. You can check which key was pressed by writing e.KeyCode.

answered May 28, 2010 at 13:29

SLaks's user avatar

SLaksSLaks

870k177 gold badges1910 silver badges1967 bronze badges

В платформе .NET, как и в Win32, для информирования о возникновении какого-либо состояния или о действии используются события, или иногда их еще называют сообщения (по-английски: events). Например, в ответ на изменение положения окна оно генерирует событие определенного класса, которое мы можем перехватить.

Для того чтобы перехватить событие, нужно создать его обработчик. Обработчик события по сути является методом, который регистрируется на отлов определенного события от определенного элемента управления/формы/компонента. Когда
наступит событие, то этот самый элемент управления/форма/компонент вызовет метод, в котором мы можем написать код реакции на событие.

С помощью визуального дизайнера Visual Studio создание обработчиков событий превращается в тривиальную задачу. На рис. 5.8 показана панель Properties в режиме просмотра событий. Чтобы увидеть что-то подобное, нужно выделить компонент, событие которого вы хотите поймать, и нажать кнопку Events в панели Properties (на рис. 5.8 эта кнопка обведена кружком). Чтобы вернуться обратно к просмотру свойств, надо щелкнуть по кнопке Properties, которая находится левее.

Панель Properties 
при просмотре событий

Рис. 5.8. Панель Properties
при просмотре событий

Теперь, чтобы создать нужный обработчик события, достаточно щелкнуть двойным щелчком в поле справа от имени события. Среда разработки создаст необходимое событие, добавит его регистрацию в своем методе InitializeComponent(), переключится в режим кода и установит курсор в тело метода, созданного для обработки события.

Давайте создадим обработчик события MouseClick. Выделите форму, перейдите
в панели Properties в режим просмотра событий Events и щелкните двойным щелчком напротив события. Будет создан метод Form1_MouseClick():

   private void Form1_MouseClick(object sender, MouseEventArgs e)
   {
     MessageBox.Show("Клик");
   }

Я здесь добавил внутрь метода обработки события вызов статического метода Show() класса MessageBox. Этот метод отображает на рабочем столе диалоговое окно с сообщением, которое вы передали в качестве параметра. В нашем случае каждый раз, когда вы щелкнете по форме, будет появляться сообщение: Клик.

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

  • Load — загрузка;
  • Activate — активация;
  • VisibleChanged — изменилось свойство Visible.
  • А при закрытии формы генерируются следующие события:
  • Deactivated — деактивировано;
  • Closing — закрытие формы (можно отменить закрытие);
  • Close — форма закрыта, и назад дороги нет.

Событие Load генерируется, когда вы впервые вызываете метод Show() для отображения формы. Посмотрим на следующий пример:

   MyForm form = new MyForm();
   form.Show();   // отобразить форму
   form.Hide();   // спрятать с помощью Hide()
   form.Show();   // Отобразить снова

Событие Load будет сгенерировано только при первом вызове метода Show(), потому что в этот момент начнет происходить загрузка формы. Когда мы вызываем метод Hide(), то форма остается загруженной, просто прячется с экрана. Следующий вызов метода Show() только изменяет видимость окна, а загрузки не произойдет, поэтому и событие Load больше генерироваться не станет.

Очень часто у вас будут возникать казусы со случайным созданием событий. Например, если щелкнуть двойным щелчком по компоненту в визуальном дизайнере, то будет создан обработчик события по умолчанию для этого компонента. Так, для кнопки событием по умолчанию является Click, и если вы случайно щелкнете двойным щелчком по компоненту в визуальном дизайнере, то будет создан такой обработчик события. А если вы не хотели его создавать? Оставлять заготовку
метода в коде? Наверное, лучше, все же, убрать обработчик события, чтобы он не мешал. Как это сделать?

Существует несколько вариантов:

  • Выделите компонент в визуальном дизайнере и перейдите в режим Events в панели свойств. Напротив события удалите в поле название метода, созданного для обработчика события. Визуальный редактор удалит регистрацию события, которую он автоматически добавил в свой метод InitializeComponent(). Если
    в обработчике события не было кода, то заготовка для метода исчезнет и из кода.
  • Если обработчик события содержит код, но он уже не нужен, то можно сначала удалить код из обработчика события, а потом выполнить действия из предыдущего пункта.
  • Если обработчик события содержит код, то можно сначала удалить имя обработчика события в режиме Events панели свойств, а потом безболезненно удалить код метода.

Если вы создали обработчик события и тут же удалили метод в редакторе кода,
то при этом среда разработки не удалит регистрацию события в методе InitializeComponent(). Это придется делать вручную. Как это сделать безболезненно? Давайте посмотрим на примере.

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

private void button1_Click(object sender, EventArgs e)
{
}

Удалите эту заготовку кода из редактора и попробуйте скомпилировать проект. Внизу окна появится сообщение об ошибке (рис. 5.9). В этой ошибке компилятор сообщает нам, что обработчик события не найден. Щелкните двойным щелчком по ошибке, и откроется вкладка с файлом (Form1.Designer.cs), где найдена ошибка, и

будет выделена строка кода, которую добавил визуальный редактор для регистрации события. События — это отдельная тема, которая будет рассмотрена в главе 10. А сейчас нужно только понимать, что для того, чтобы избавиться от ошибки, нужно удалить строку, которую выделил нам редактор. Так вы вручную удалите регистрацию, и проект откомпилируется без проблем.

 Сообщение об ошибке, что обработчик события не найден

Рис. 5.9. Сообщение об ошибке, что обработчик события не найден

Это бесплатная глава книги Библия C#. В новом издании эта глава переписана с учетом универсальных при-ложений Windows, а старая версия главы, которая не потеряла еще своей актуаль-ности стала бесплатной и доступной всем.

Все исходные коды главы 5 Библии C#

На примере решения задачи определения площади поверхности шара, подробно описывается как программировать событие в среде Microsoft Visual Studio — C#.


Содержание

  • Условие задачи
  • Выполнение
    • 1. Запустить MS Visual Studio. Создать проект по шаблону Windows Forms Application
    • 2. Размещение элементов управления на форме.
    • 3. Настройка элементов управления типа Label.
    • 4. Элемент управления Button.
    • 5. Корректировка вида формы.
    • 6. Программирование события клика на кнопке «Вычислить«.
      • 6.1. Вызов программного кода.
      • 6.2. Ввод программного кода обработки события.
      • 6.3. Корректировка программного кода.
    • 7. Запуск программы на выполнение.
  • Связанные темы

Поиск на других ресурсах:

Условие задачи

Составить программу, которая по введенному радиусу R находит площадь поверхности шара. Программу реализовать как Windows Forms Application.

Площадь поверхности шара вычисляется по формуле:

02_02_00_005_00_

где R – радиус шара, πконстанта равная 3.1415.

В программе используются следующие элементы управления:

  • Label – метка для вывода сообщений;
  • Button – кнопка для выполнения расчета;
  • TextBox – поле ввода, предназначенное для ввода значения R.

 


Выполнение

1. Запустить MS Visual Studio. Создать проект по шаблону Windows Forms Application

Подробный пример создания нового приложения типа Windows Forms Application описан здесь. Сохранить проект под любым именем.

 

2. Размещение элементов управления на форме.

Из вкладки «Common Controls» выносим на форму четыре элемента управления (рис. 1):

  • два элемента управления типа Label (метка);
  • элемент управления типа Button (кнопка);
  • элемент управления типа TextBox (строка ввода).

C# Windows Forms эементы управления Label Button TextBox

Рис. 1. Элементы управления Label, Button, TextBox

Автоматически создаются четыре объекта с именами label1, label2, button1 и textBox1. По этим именам можно будет иметь доступ к свойствам этих объектов.

Форма приложения будет иметь вид, как показано на рис. 2.

C# Windows Forms форма приложение рисунок

Рис. 2. Форма приложения после размещения label1, label2, button1 и textBox1

 

3. Настройка элементов управления типа Label.

Выделяем элемент управления (объект) label1. В палитре Toolbox изменяем свойство Text, набираем «R = «.

Точно так же изменяется свойство Text для элемента управления label2 (рис. 3). Вводим текст «Площадь поверхности шара = «.

C# Windows Forms свойство Text

Рис. 3. Изменение свойства Text в label1

 

4. Элемент управления Button.

Аналогично к label1 выделяем элемент управления (объект) button1. В свойстве Text вводим строку «Вычислить«.



 

5. Корректировка вида формы.

Изменяем название формы. Для этого выделяем форму. В свойстве Text формы вводим текст «Площадь поверхности шара«.

После корректировки форма будет иметь вид, как показано на рисунке 4.

C# Windows Forms Application форма

Рис. 4. Вид формы после корректировки

 

6. Программирование события клика на кнопке «Вычислить«.
6.1. Вызов программного кода.

В программе нужно обработать событие, которое генерируется когда пользователь делает клик «мышкой» на кнопке «Вычислить«.

После нажатия на кнопке «Вычислить» формируется фрагмент кода, который будет обрабатываться нашим приложением. Во время обработки сначала определяется значение введенного радиуса R, затем делается расчет по формуле и вывод результата.

Чтобы вызвать фрагмент кода обработки события на кнопке button1 нужно выполнить такие действия:

  • выделить кнопку button1 (рис. 5 — 1);
  • перейти к вкладке Events (события) в окне свойств (рис. 5 — 2);
  • сделать двойной щелчок «мышкой» напротив события «Click» (рис. 5 — 3).

C# Windows Forms Application событие Click

Рис. 5. Последовательность вызова фрагмента кода обработки события Click

В итоге, откроется вкладка программного кода, который размещен в файле «Form1.cs» (рис. 6).

C# Windows Forms Application обработка событие клик кнопка

Рис. 6. Метод обработки события клика на кнопке button1

Листинг программного кода следующий:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
   public partial class Form1 : Form
   {
       public Form1()
       {
           InitializeComponent();
       }

       private void button1_Click(object sender, EventArgs e)
       {

       }
   }
}

 

6.2. Ввод программного кода обработки события.

В методе button1_Click вписываем код обработки события. Листинг метода следующий:

...

private void button1_Click(object sender, EventArgs e)
{
    const double Pi = 3.1415;
    double R,S;
    R = Double.Parse(textBox1.Text);
    S = 4 * Pi * R * R;
    label2.Text = "Площадь поверхности шара = " + S.ToString();
}

...

В коде описываются две переменные R и S типа double. Также описывается константа Pi.

Для преобразования из текстового типа string в тип double используется метод Parse. Таким образом заполняется значение переменной R.

R = Double.Parse(textBox1.Text.ToString());

Подобным образом можно преобразовывать данные и других типов. Например, для типа int можно написать:

int d;
d = Int32.Parse("100"); // d = 100

Результат вычисления площади поверхности шара выводится в label2.Text. Преобразование в тип string осуществляется с помощью метода ToString().

 

6.3. Корректировка программного кода.

В коде, описанном в пункте 6.2 нету защиты от некорректного ввода значения R. Поэтому метод button1_Click нужно переписать следующим образом:

...
private void button1_Click(object sender, EventArgs e)
{
    try
    {
        const double Pi = 3.1415;
        double R, S;
        R = Double.Parse(textBox1.Text);
        S = 4 * Pi * R * R;
        label2.Text = "Площадь поверхности шара = " + S.ToString();
    }
    catch (FormatException ex)
    {
        label2.Text = "Ошибка - " + ex.Message;
    }
}
...

Блок

try
{
  ...
}
catch (...)
{
  ...
}

позволяет осуществить программный перехват критической ситуации, которая может возникнуть в результате ввода некорректного значения в поле textBox1 (например «абракадабра»).

В этом случае в свойстве ex.Message буде выведено сообщение:

Ошибка – Input string was not in a correct format.

 

7. Запуск программы на выполнение.

После этого можно запустить нашу программу на выполнение и протестировать ее работу при любых значениях R.

 


Связанные темы

  • Программирование события в Delphi 2010.
  • Пример программирования события в C++ Builder.
  • Пример создания и вызова диалогового окна в MS Visual Studio — C++.

 


Windows Forms является популярной технологией для создания пользовательского интерфейса в приложениях на C#. Простое и интуитивно понятное использование элементов управления позволяет быстро создавать функциональные приложения. Одним из ключевых моментов использования Windows Forms является обработка событий элементов управления. В этой статье мы рассмотрим, как правильно обрабатывать события элементов управления и как это можно применить на практике.

Что такое события элементов управления?

События элементов управления представляют собой действия, производимые пользователем с помощью элементов управления, таких как кнопки, поля ввода, списки и т.д. Например, когда пользователь нажимает на кнопку, он инициирует событие Click, которое можно обработать в коде приложения. События являются ключевым механизмом для создания интерактивных приложений на Windows Forms.

Создание обработчика события

Для того чтобы обработать событие элемента управления, нужно создать обработчик события. Обработчик события — это метод, который выполняется при наступлении определенного события. В C# обработчик события представляет собой метод, который имеет такую же сигнатуру, как и делегат для данного события. Например, если мы хотим обработать событие Click кнопки, то нам нужно создать метод с сигнатурой void Button_Click(object sender, EventArgs e). Этот метод будет вызываться при нажатии на кнопку.

Добавление обработчика события

Чтобы добавить обработчик события к элементу управления, нужно использовать оператор +=. Например, если мы хотим добавить обработчик события Click к кнопке btnClick, то мы можем сделать это следующим образом:

btnClick.Click += new EventHandler(Button_Click);

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

Удаление обработчика события

Чтобы удалить обработчик события, нужно использовать оператор -=. Например, если мы хотим удалить обработчик события Click из кнопки btnClick, то мы можем сделать это следующим образом:

btnClick.Click -= new EventHandler(Button_Click);

Эта строка кода удаляет обработчик события Button_Click из кнопки btnClick. Когда пользователь нажмет на кнопку, этот метод не будет вызван.

Пример обработки события

Рассмотрим пример обработки события нажатия на кнопку. Допустим, мы создали форму с кнопкой btnClick и полем ввода txtInput. Когда пользователь нажмет на кнопку, мы хотим вывести содержимое поля ввода в консоль. Для этого мы создадим обработчик события Click для кнопки и извлечем содержимое поля ввода в переменную inputText.

private void Button_Click(object sender, EventArgs e)
{
    string inputText = txtInput.Text;
    Console.WriteLine(inputText);
}

Затем мы добавим обработчик события к кнопке:

btnClick.Click += new EventHandler(Button_Click);

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

В заключение

Обработка событий элементов управления является важным аспектом разработки приложений на Windows Forms. Правильное использование обработчиков событий позволяет создавать функциональные и интерактивные приложения. В этой статье мы рассмотрели основные моменты обработки событий элементов управления и показали пример их использования на практике. Если вы только начинаете изучать Windows Forms, не забывайте обработку событий элементов управления — это один из ключевых моментов в создании приложений на этой платформе.

  • Как создать том на новом жестком диске windows 10
  • Как создать системный диск для установки windows 10
  • Как создать словарь для брута в windows
  • Как создать свой dns сервер на windows 10
  • Как создать том на жестком диске windows 10 через командную строку