Vb. Net-afsender- og e-begivenhedsparametre

I VB6 var en subroutine af hændelser, som Button1_Click, meget mindre kompliceret, fordi systemet kaldte subroutinen strengt ved navn. Hvis der eksisterede en knap1_Klik-begivenhed, kaldte systemet den. Det er direkte og ligetil.

Men i VB.NET er der to store opgraderinger, der foretages VB.NET SOOPladet (det er "OOP" til Objektorienteret programmering).

  1. "Håndtag" -klausulen kontrollerer, om systemet kalder underprogrammet, ikke navnet.
  2. Afsender- og e-parametre sendes til underprogrammet.

Brug af parametre

Lad os se på et simpelt eksempel for at se den forskel, som parametre udgør i VB.NET.

Privat underknap1_Klik ( 

 ByVal afsender som system. Objekt,

 ByVal e As System. EventArgs

 ) Håndtagsknap1.Klik

 'Din kode går her

Afslut under

Begivenhedsunderprogrammer modtager altid et "afsender" -objekt og en system EventArgs-parameter "e". Da parameteren EventArgs er et objekt, understøtter den de egenskaber og metoder, der er nødvendige. F.eks. Den gamle VB6 MouseMove-hændelsessubutine, der blev brugt til at modtage fire parametre:

instagram viewer
  • Knap som heltal
  • Skift som heltal
  • X som singel
  • Y som singel

Da mere avancerede mus kom ud med flere knapper, havde VB6 et reelt problem med at støtte dem. VB.NET passerer kun en MouseEventArgs-parameter, men det understøtter meget flere egenskaber og metoder. Og hver af dem er genstande, der understøtter endnu mere. For eksempel e. Knappeegenskab indeholder alle disse egenskaber:

  • Venstre
  • Mellemøsten
  • Ret
  • Ingen
  • XButton1
  • XButton2

Hvis nogen opfinder en "trancendental" mus med en "virtuel" knap, vil VB.NET kun skulle opdatere .NET Framework for at understøtte den, og ingen tidligere kode vil gå i stykker som resultat.

Der er en række .NET-teknologier, der absolut afhænger af disse parametre. For eksempel, da din pc normalt kun har en enkelt skærm til visning af grafik, skal din kode flette den grafik, den opretter, til det samme billede, der bruges af Windows. Derfor skal et enkelt "grafik" -objekt deles. Den vigtigste måde, hvorpå din kode er i stand til at bruge det "grafik" -objekt, er at bruge den e-parameter, der er overført til OnPaint-begivenheden med PaintEventArgs-objektet.

Protected Overrides Sub OnPaint (

 ByVal e As System. Windows. Formularer. PaintEventArgs)

 Dim g Som grafik = e. Grafik

Andre eksempler

Hvad kan du ellers gøre med disse parametre? For at illustrere skal du antage, at du vil finde ud af, om en streng, måske noget, du har indtastet i en tekstboks, findes i en af ​​en samling af andre tekstbokse, når du klikker på en. Du kan kode et par dusin næsten identiske underprogrammer for hver tekstboks:

Hvis TextBox42.Text. Indeks af(

 SearchString. Tekst) = -1 

 Så NotFound. Tekst = 

 "Ikke fundet"

Men det er meget nemmere at kode kun en og lade den håndtere dem alle. Afsenderparameteren afslører, hvilken tekstboks der blev klikket på.

Privat sub FindIt (

 ByVal afsender som system. Objekt,

 ByVal e As System. EventArgs

 ) Håndterer TextBox1.Enter, 

 TextBox2.Enter, 

... og til og med.. .

 TextBox42.Enter

 Dim myTextbox som TextBox

myTextbox = afsender

 Dim indeksChar som heltal = 

 mintekstboks. Tekst. Indeks af( 

 SearchString. Tekst)

 Hvis IndexChar = -1 Så _

 Ikke fundet. Tekst = "Ikke fundet" _

 Ellers _

 Ikke fundet. Tekst = "Fundet det!"

 Afslut under

For nylig bad en programmør mig om en bedre måde at "slette den linje, der blev klikket på en af ​​de seks specificerede lister." Han fik det til at arbejde i et par dusin linjer med kode, der simpelthen forvirrede mig. Men ved hjælp af afsender var det virkelig ganske enkelt:

Privat underlisteBox_Klik ( 

 ByVal afsender som objekt, 

 ByVal e As System. EventArgs

 ) Håndterer ListBox1.Click, ListBox2.Click

 Dim myListBox som ny ListBox

 myListBox = afsender

 myListBox. Elementer. FjernAt (myListBox. SelectedIndex)

Afslut under

Et yderligere eksempel på at negle punktet er et spørgsmål, der blev sendt af Pierre i Belgien. Pierre testede ligheden mellem Button1 og afsender ved hjælp af Er operator til objekter:

Hvis afsender er knap1 Så ...

Dette er syntaktisk korrekt, fordi afsender og knap1 begge er objekter, der kan henvises til. Og da afsender virkelig er identisk med Button1, hvorfor fungerer det ikke?

Svaret afhænger af et nøgleord, der findes lidt tidligere i erklæringen. Lad os først kontrollere Microsoft-dokumentationen for Er operatør.

Visual Basic sammenligner to objektreferencevariabler med Is Operator. Denne operator bestemmer, om to referencevariabler refererer til den samme objektforekomst.

Bemærk, at afsenderen er bestået ByVal. Det betyder, at en kopi af knap1 sendes, ikke selve objektet. Så når Pierre tester for at se, om afsender og knap1 er den samme instans, er resultatet falsk.

For at teste, om der er klikket på knap1 eller knap2, skal du omdanne afsender til et faktisk knapobjekt og derefter teste en egenskab for det pågældende objekt. Tekst bruges normalt, men du kan teste en værdi i Tag eller endda egenskaben Placering.

Denne kode fungerer:

Dæmp myButton som knap

myButton = afsender

Hvis myButton. Tekst = "Knap1" Derefter

instagram story viewer