Table des matières

Fiche savoirs : programmation événementielle en C#

Dans une application de bureau vous mettez en oeuvre une programmation événementielle qui est différente de la programmation en mode console.

L'interface

Exemple avec cette application graphique de bureau : L'interface est graphique et l'utilisateur est maître de l'ordre d'exécution :

C'est l'utilisateur qui choisit à quel moment doit s'exécuter une commande en fonction des objets graphiques qu'il va solliciter.

De plus, l'aspect visuel est nettement plus attractif et intuitif :

Voici les caractéristiques des objets graphiques :

Nom (name) Type Autres propriétés
txtValeur1TextBoxTextAlign : Right
txtValeur2TextBox(idem txtValeur1)
txtResultatTextBox(idem txtValeur1)
lblOperationLabelFont : Size : 16
btnAjouterButtonFont : Size : 20
Font : Bold : True
btnMultiplierButton(idem btnAjouter)
btnEffacerButtonImage : image fournie de la gomme ou image de votre choix redimensionnée
btsQuitterButton(idem btnEffacer avec une autre image)

En l'état, l'application peut déjà être testée : les boutons ne sont pas encore actifs mais il est déjà possible de saisir des valeurs dans les zones de saisie.

Le code événementiel

Voici le code de chaque événement :

private void btnEffacer_Click(object sender, EventArgs e)
{
  txtValeur1.Text = "";
  txtValeur2.Text = "";
  txtResultat.Text = "";
  lblOperation.Text = "";
}
private void btnQuitter_Click(object sender, EventArgs e)
{
  Application.Exit();
}

Faire la somme des 2 valeurs saisies (si c'est possible) et la transférer dans txtResultat

private void btnAjouter_Click(object sender, EventArgs e)
{
  try
  {
    txtResultat.Text = (float.Parse(txtValeur1.Text) + float.Parse(txtValeur2.Text)).ToString();
    lblOperation.Text = "+";
  }
  catch { };
}

Faire la multiplication des 2 valeurs saisies (si c'est possible) et la transférer dans txtResultat.

private void btnMultiplier_Click(object sender, EventArgs e)
{
  try
  {
    txtResultat.Text = (float.Parse(txtValeur1.Text) * float.Parse(txtValeur2.Text)).ToString();
    lblOperation.Text = "x";
  }
  catch { };
}
private void txtValeur1_TextChanged(object sender, EventArgs e)
{
  txtResultat.Text = "";
  lblOperation.Text = "";
}
private void txtValeur2_TextChanged(object sender, EventArgs e)
{
  txtResultat.Text = "";
  lblOperation.Text = "";
}

Le code non événementiel

Il est possible de créer des modules non événementiels, comme dans la programmation procédurale classique, pour optimiser le code.

Par exemple, on remarque que le code est identique dans les 2 foncions événementielles sur le changement de texte dans txtValeur1 et txtValeur2. On peut alors créer un module isolé et l'appeler dans les deux procédures événementielles.

private void AnnuleOperation()
{
  lblOperation.Text = "";
  txtResultat.Text = "";
}
private void txtValeur1_TextChanged(object sender, EventArgs e)
{
  AnnuleOperation();
}