Vb. Nettsender og e Event-parametere

click fraud protection

I VB6 var en hendelses subroutine, som Button1_Click, mye mindre komplisert fordi systemet kalte subroutinen strengt med navn. Hvis en knapp1_Klikk-hendelse fantes, kalte systemet den. Det er direkte og greit.

Men i VB.NET er det to store oppgraderinger som gjør VB.NET SOOP-ladet (det er "OOP" for Objektorientert programmering).

  1. "Håndtak" -klausulen styrer om systemet kaller subroutine, ikke navnet.
  2. Avsender og e-parametere sendes til subroutine.

Bruk av parametere

La oss se på et enkelt eksempel for å se forskjellen som parametere utgjør i VB.NET.

Privat underknapp1_Klikk ( 

 ByVal avsender som system. Gjenstand,

 ByVal e As System. EventArgs

 ) Håndtaksknapp1.Klikk

 'Koden din går her

Slutt sub

Underrutiner for hendelser mottar alltid et "avsender" -objekt og en system EventArgs-parameter "e". Siden parameteren EventArgs er et objekt, støtter den uansett egenskaper og metoder som er nødvendige. For eksempel den gamle VB6 MouseMove hendelsessubutinen som ble brukt til å motta fire parametere:

  • Knapp som heltall
  • Skift som heltall
  • X som singel
  • Y Som singel
instagram viewer

Da mer avanserte mus kom ut med flere knapper, hadde VB6 et reelt problem å støtte dem. VB.NET passerer bare en MouseEventArgs-parameter, men den støtter mye flere egenskaper og metoder. Og hver av dem er objekter som støtter enda mer. For eksempel e. Knappegenskap inneholder alle disse egenskapene:

  • Venstre
  • Midten
  • Ikke sant
  • Ingen
  • XButton1
  • XButton2

Hvis noen oppfinner en "trancendental" mus med en "virtuell" knapp, vil VB.NET bare måtte oppdatere .NET Framework for å støtte den, og ingen tidligere kode vil knekke som et resultat.

Det er en rekke .NET-teknologier som absolutt er avhengig av disse parametrene. For eksempel, siden PC-en vanligvis bare har en enkelt skjerm for å vise grafikk, må koden din slå sammen grafikken den oppretter til det samme bildet som brukes av Windows. Av den grunn må et enkelt "grafikk" -objekt deles. Den viktigste måten koden din er i stand til å bruke det "grafikk" -objektet er å bruke e-parameteren som er overført til OnPaint-arrangementet med PaintEventArgs-objektet.

Protected Overrides Sub OnPaint (

 ByVal e As System. Windows. Former. PaintEventArgs)

 Dim g Som grafikk = e. grafikk

Andre eksempler

Hva annet kan du gjøre med disse parameterne? For å illustrere, antar du at du vil finne om en streng, kanskje noe du skrev inn i en tekstboks, finnes i en av en samling andre tekstbokser når du klikker på en. Du kan kode noen få dusin praktisk talt identiske underutgaver for hver tekstboks:

Hvis TextBox42.Text. Oversikt over(

 Search. Tekst) = -1 

 Så NotFound. Tekst = 

 "Ikke funnet"

Men det er mye lettere å kode bare en og la den takle dem alle. Avsenderparameteren vil avsløre hvilken tekstboks som ble klikket.

Private Sub FindIt (

 ByVal avsender som system. Gjenstand,

 ByVal e As System. EventArgs

 ) Håndterer TextBox1.Enter, 

 TextBox2.Enter, 

... og av og på.. .

 TextBox42.Enter

 Dim myTextbox Som TextBox

myTextbox = avsender

 Dim IndeksChar som heltall = 

 myTextbox. Tekst. Oversikt over( 

 Search. Tekst)

 Hvis IndexChar = -1 Da _

 Ikke funnet. Tekst = "Ikke funnet" _

 Annet _

 Ikke funnet. Tekst = "Fant det!"

 Slutt sub

Nylig ba en programmerer meg om en bedre måte å "slette linjen som ble klikket i en av seks spesifiserte lister." Han fikk det til å fungere i et par dusin linjer med kode som ganske enkelt forvirret meg. Men ved å bruke avsender var det egentlig ganske enkelt:

Privat underlisteBox_Klikk ( 

 ByVal-avsender som objekt, 

 ByVal e As System. EventArgs

 ) Håndterer ListBox1.Click, ListBox2.Click

 Dim myListBox som ny ListBox

 myListBox = avsender

 myListBox. Elementer. FjernAt (myListBox. SelectedIndex)

Slutt sub

Et eksempel til å spikre poenget er et spørsmål som ble sendt inn av Pierre i Belgia. Pierre testet likheten mellom Button1 og avsender ved å bruke Er operatør for objekter:

Hvis avsender er knapp1 ...

Dette er syntaktisk riktig fordi avsender og knapp1 begge er objekter som det kan henvises til. Og siden avsender virkelig er identisk med Button1, hvorfor fungerer det ikke?

Svaret avhenger av et nøkkelord som finnes litt tidligere i uttalelsen. La oss først sjekke Microsoft-dokumentasjonen for Er operatør.

Visual Basic sammenligner to objektreferansevariabler med Is Operator. Denne operatøren bestemmer om to referansevariabler refererer til samme objektforekomst.

Legg merke til at avsender er bestått ByVal. Det betyr at en kopi av knapp1 sendes, ikke selve objektet. Så når Pierre tester for å se om avsender og knapp 1 er samme forekomst, er resultatet usant.

For å teste om knapp 1 eller knapp 2 er blitt klikket, må du gjøre avsender til et faktisk knappobjekt og deretter teste en egenskap til det objektet. Tekst brukes vanligvis, men du kan teste en verdi i Tag eller til og med Location-egenskapen.

Denne koden fungerer:

Dim myButton As-knapp

myButton = avsender

Hvis myButton. Tekst = "Knapp1" Deretter

instagram story viewer