Le Vb. Paramètres Net Sender et e Event

Dans VB6, un sous-programme d'événement, comme Button1_Click, était beaucoup moins compliqué car le système appelait le sous-programme strictement par son nom. Si un événement Button1_Click existait, le système l'a appelé. C'est direct et simple.

Mais dans VB.NET, il existe deux mises à niveau majeures qui rendent VB.NET SOOPercharged (c'est "OOP" pour Programmation orientée objet).

  1. La clause "Handles" contrôle si le système appelle le sous-programme, pas le nom.
  2. Les paramètres sender et e sont transmis au sous-programme.

Utilisation des paramètres

Regardons un exemple simple pour voir la différence que les paramètres font dans VB.NET.

Sous-bouton privé1_Click ( 

 Expéditeur ByVal en tant que système. Objet,

 ByVal e As System. EventArgs

 ) Poignées Button1.Click

 «Votre code va ici

End Sub

Les sous-programmes d'événements reçoivent toujours un objet "expéditeur" et un paramètre EventArgs système "e". Étant donné que le paramètre EventArgs est un objet, il prend en charge toutes les propriétés et méthodes nécessaires. Par exemple, l'ancien sous-programme d'événement VB6 MouseMove recevait quatre paramètres:

instagram viewer

  • Button As Integer
  • Shift As Integer
  • X comme célibataire
  • Y comme célibataire

Lorsque des souris plus avancées ont sorti plus de boutons, VB6 a eu un vrai problème à les supporter. VB.NET ne transmet qu'un seul paramètre MouseEventArgs mais il prend en charge beaucoup plus de propriétés et de méthodes. Et chacun d'eux sont des objets qui supportent encore plus. Par exemple, l'e. La propriété Button contient toutes ces propriétés:

  • La gauche
  • Milieu
  • Droite
  • Aucun
  • XButton1
  • XButton2

Si quelqu'un invente une souris "trancendental" avec un bouton "virtuel", VB.NET n'aura qu'à mettre à jour le .NET Framework pour le prendre en charge et aucun code précédent ne se cassera en conséquence.

Il existe un certain nombre de technologies .NET qui dépendent absolument de ces paramètres. Par exemple, puisque votre PC n'a généralement qu'un seul écran pour afficher les graphiques, votre code doit fusionner les graphiques qu'il crée dans la même image utilisée par Windows. Pour cette raison, un seul objet "graphique" doit être partagé. La façon principale dont votre code est capable d'utiliser cet objet "graphique" est d'utiliser le paramètre e qui est transmis à l'événement OnPaint avec l'objet PaintEventArgs.

Substitutions protégées Sub OnPaint (

 ByVal e As System. Les fenêtres. Formes. PaintEventArgs)

 Dim g As Graphics = e. Graphique

Autres exemples

Que pouvez-vous faire d'autre avec ces paramètres? À titre d'illustration, supposons que vous vouliez savoir si une chaîne, peut-être quelque chose que vous avez entrée dans une zone de texte, existe dans l'une des collections d'autres zones de texte lorsque vous cliquez dessus. Vous pouvez coder quelques dizaines de sous-programmes pratiquement identiques pour chaque zone de texte:

Si TextBox42.Text. Indice de(

 SearchString. Texte) = -1 

 Ensuite, NotFound. Texte = 

 "Pas trouvé"

Mais il est beaucoup plus facile d'en coder un seul et de le laisser les gérer tous. Le paramètre expéditeur révélera sur quelle zone de texte vous avez cliqué.

Private Sub FindIt (

 Expéditeur ByVal en tant que système. Objet,

 ByVal e As System. EventArgs

 ) Gère TextBox1.Enter, 

 TextBox2.Enter, 

... et ainsi de suite.. .

 TextBox42.Enter

 Dim myTextbox As TextBox

myTextbox = expéditeur

 Dim IndexChar As Integer = 

 myTextbox. Texte. Indice de( 

 SearchString. Texte)

 Si IndexChar = -1 Alors _

 Pas trouvé. Text = "Not Found" _

 Autre _

 Pas trouvé. Text = "Trouvé!"

 End Sub

Récemment, un programmeur m'a demandé un meilleur moyen de "supprimer la ligne sur laquelle vous avez cliqué dans l'une des six listes spécifiées". Il l'a fait fonctionner dans quelques dizaines de lignes de code qui m'ont simplement dérouté. Mais en utilisant l'expéditeur, c'était vraiment assez simple:

Sous-liste privéeBox_Click ( 

 Expéditeur ByVal en tant qu'objet, 

 ByVal e As System. EventArgs

 ) Gère ListBox1.Click, ListBox2.Click

 Dim myListBox comme nouveau ListBox

 myListBox = expéditeur

 myListBox. Articles. RemoveAt (myListBox. SelectedIndex)

End Sub

Un autre exemple pour clouer le point est une question qui a été envoyée par Pierre en Belgique. Pierre testait l'égalité de Button1 et de l'expéditeur à l'aide du Est opérateur pour les objets:

Si l'expéditeur est Button1, alors ...

Ceci est syntaxiquement correct car l'expéditeur et Button1 sont tous deux des objets qui peuvent être référencés. Et puisque l'expéditeur est vraiment identique à Button1, pourquoi cela ne fonctionne-t-il pas?

La réponse dépend d'un mot-clé qui se trouve un peu plus tôt dans l'instruction. Tout d'abord, vérifions la documentation Microsoft pour le Est opérateur.

Visual Basic compare deux variables de référence d'objet avec l'opérateur Is. Cet opérateur détermine si deux variables de référence font référence à la même instance d'objet.

Notez que l'expéditeur est dépassé ByVal. Cela signifie qu'une copie de Button1 est passée, pas l'objet réel lui-même. Ainsi, lorsque Pierre teste pour voir si expéditeur et Button1 sont la même instance, le résultat est False.

Pour tester si Button1 ou Button2 a été cliqué, vous devez transformer l'expéditeur en un objet Button réel, puis tester une propriété de cet objet. Le texte est généralement utilisé, mais vous pouvez tester une valeur dans Tag ou même dans la propriété Location.

Ce code fonctionne:

Bouton Dim myButton As

myButton = expéditeur

Si myButton. Text = "Button1" Then

instagram story viewer