Comment : consommer des événements dans une application Windows Forms
Mise à jour : novembre 2007
Un scénario courant dans les applications Windows Forms est d'afficher un formulaire proposant des contrôles, puis d'exécuter une action spécifique selon le contrôle sur lequel l'utilisateur clique. Par exemple, un contrôle Button déclenche un événement lorsque l'utilisateur clique dessus dans le formulaire. En gérant l'événement, votre application peut exécuter la logique d'application appropriée à un clic sur ce bouton.
Pour plus d'informations sur les Windows Forms, consultez Mise en route des Windows Forms.
Pour gérer un événement associé à un clic sur un bouton dans un formulaire Windows
Créez un formulaire Windows contenant un contrôle Button.
private Button button;
Private WithEvents myButton As Button
Définissez un gestionnaire d'événements qui correspond à la signature du délégué d'événement Click. L'événement Click utilise la classe EventHandler pour le type délégué et la classe EventArgs pour les données d'événement.
void Button_Click(object sender, EventArgs e) {...}
Sub Button_Click(sender As Object, e As EventArgs) ... End Sub
Ajoutez la méthode de gestionnaire d'événements à l'événement Click du Button.
button.Click += new EventHandler(this.Button_Click);
AddHandler myButton.Click, AddressOf Me.Button_Click
Remarque : Un concepteur (tel que Visual Studio 2005) assure pour vous la transmission de cet événement en générant un code similaire à celui de cet exemple.
Exemple
L'exemple de code suivant gère l'événement Click d'un Button pour changer la couleur d'arrière-plan de TextBox. Les éléments en gras indiquent le gestionnaire d'événements et son mode de connexion à l'événement Click de Button.
Le code figurant dans cet exemple a été écrit sans utiliser de concepteur visuel (tel que Visual Studio 2005) et ne contient que des éléments de programmation essentiels. Si vous utilisez un concepteur, il générera alors du code supplémentaire.
[C#]
using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;
public class MyForm : Form
{
private TextBox box;
private Button button;
public MyForm() : base()
{
box = new TextBox();
box.BackColor = System.Drawing.Color.Cyan;
box.Size = new Size(100,100);
box.Location = new Point(50,50);
box.Text = "Hello";
button = new Button();
button.Location = new Point(50,100);
button.Text = "Click Me";
// To wire the event, create
// a delegate instance and add it to the Click event.
button.Click += new EventHandler(this.Button_Click);
Controls.Add(box);
Controls.Add(button);
}
// The event handler.
private void Button_Click(object sender, EventArgs e) { box.BackColor = System.Drawing.Color.Green; }
// The STAThreadAttribute indicates that Windows Forms uses the
// single-threaded apartment model.
[STAThreadAttribute]
public static void Main(string[] args)
{
Application.Run(new MyForm());
}
}
[Visual Basic]
Option Strict On
Imports System.ComponentModel
Imports System.Windows.Forms
Imports System.Drawing
Public Class MyForm
Inherits Form
Private box As TextBox
Private WithEvents myButton As Button
Public Sub New()
box = New TextBox()
box.BackColor = System.Drawing.Color.Cyan
box.Size = New Size(100, 100)
box.Location = New Point(50, 50)
box.Text = "Hello"
myButton = New Button()
myButton.Location = New Point(50, 100)
myButton.Text = "Click Me"
AddHandler myButton.Click, AddressOf Me.Button_Click
Controls.Add(box)
Controls.Add(myButton)
End Sub
' The event handler.
Private Sub Button_Click(sender As Object, e As EventArgs) box.BackColor = System.Drawing.Color.Green End Sub
' The STAThreadAttribute indicates that Windows Forms uses the
' single-threaded apartment model.
<STAThreadAttribute()> _
Public Shared Sub Main(args() As String)
Application.Run(New MyForm())
End Sub
End Class
Compilation du code
Enregistrez le code précédent dans un fichier (avec une extension .cs pour un fichier C# et .vb pour un fichier Visual Basic 2005), compilez et exécutez. Par exemple, si le fichier source s'appelle WinEvents.cs (ou WinEvents.vb), exécutez la commande suivante :
csc /r:System.DLL /r:System.Windows.Forms.DLL /r:System.Drawing.DLL WinEvents.cs
vbc /r:System.DLL /r:System.Windows.Forms.DLL /r:System.Drawing.DLL WinEvents.vb
Votre fichier exécutable s'appellera WinEvents.exe.