Vb. Net-lähettäjän ja e-tapahtuman parametrit

VB6: ssa tapahtuman aliohjelma, kuten Button1_Click, oli paljon vähemmän monimutkainen, koska järjestelmä kutsui aliohjelmaa tiukasti nimellä. Jos Button1_Click-tapahtuma oli olemassa, järjestelmä kutsui sitä. Se on suoraa ja suoraviivaista.

Mutta VB.NETissä on kaksi suurta päivitystä, jotka tekevät VB.NET SOOPercharged (se on "OOP" Olio-ohjelmointi).

  1. "Kahvat" -lause hallitsee kutsutaanko järjestelmä aliohjelmaa, ei nimeä.
  2. Lähettäjä- ja e-parametrit välitetään aliohjelmaan.

Parametrien käyttö

Katsotaanpa yksinkertaista esimerkkiä nähdäksesi ero, jonka parametrit tekevät VB.NET: ssä.

Yksityinen alapainike1_Klikkaa ( 

 ByVal-lähettäjä järjestelmänä. Esine,

 ByVal e As -järjestelmä. EventArgs

 ) Kahvat Button1.Click

 'Koodisi menee tänne

End Sub

Tapahtuman aliohjelmat vastaanottavat aina "lähettäjän" objektin ja järjestelmän EventArgs-parametrin "e". Koska EventArgs-parametri on objekti, se tukee kaikkia tarvittavia ominaisuuksia ja menetelmiä. Esimerkiksi vanha VB6 MouseMove -tapahtuman aliohjelma, jota käytetään vastaanottamaan neljä parametria:

instagram viewer
  • Painike kokonaislukuna
  • Vaihda kokonaislukuna
  • X Yhtenä
  • Y kuin sinkku

Kun edistyneemmät hiiret tulivat ulos useammalla painikkeella, VB6: lla oli todellinen ongelma tukea niitä. VB.NET ohittaa vain yhden MouseEventArgs-parametrin, mutta se tukee paljon enemmän ominaisuuksia ja menetelmiä. Ja jokainen niistä on esineitä, jotka tukevat vielä enemmän. Esimerkiksi e. Painikeominaisuus sisältää kaikki nämä ominaisuudet:

  • Vasen
  • keskimmäinen
  • oikea
  • Ei mitään
  • XButton1
  • XButton2

Jos joku keksii "trancendentaalisen" hiiren "virtuaalisella" -painikkeella, VB.NET joutuu päivittämään .NET-kehys vain tukemaan sitä, eikä mikään aikaisempi koodi hajoa seurauksena.

On olemassa useita .NET-tekniikoita, jotka ovat ehdottomasti riippuvaisia ​​näistä parametreista. Esimerkiksi, koska tietokoneellasi on yleensä vain yksi näyttö grafiikan näyttämistä varten, koodisi on yhdistettävä sen luoma grafiikka samaan kuvaan, jota Windows käyttää. Tästä syystä yksi "grafiikka" objekti on jaettava. Tärkein tapa, jolla koodisi pystyy käyttämään kyseistä "grafiikkaa", on käyttää e-parametria, joka on siirretty OnPaint-tapahtumaan PaintEventArgs-objektin kanssa.

Suojattu ohittaa Sub OnPaintin (

 ByVal e As -järjestelmä. Windows. Lomakkeet. PaintEventArgs)

 Himmennä graafisena = e. grafiikka

Muut esimerkit

Mitä muuta voit tehdä näillä parametreilla? Havainnollistakaamme esimerkiksi, että haluat selvittää, onko jokin merkkijono, kenties jotain, jonka kirjoitit tekstilaatikkoon, jokaisessa muussa tekstilaatikossa, kun napsautat sitä. Voit koodata muutama tusina käytännöllisesti identtistä aliohjelmaa kutakin tekstilaatikkoa varten:

Jos TextBox42.Text. Sisällysluettelo(

 SearchString. Teksti) = -1 

 Sitten NotFound. Teksti = 

 "Ei löydetty"

Mutta on paljon helpompaa koodata vain yksi ja antaa sen käsitellä niitä kaikkia. Lähettäjäparametri paljastaa, mitä tekstilaatikkoa napsautettiin.

Yksityinen alihaku (

 ByVal-lähettäjä järjestelmänä. Esine,

 ByVal e As -järjestelmä. EventArgs

 ) Käsittelee TextBox1.Enter, 

 TextBox2.Enter, 

... ja edelleen.. .

 TextBox42.Enter

 Himmennä myTextbox tekstilaatikkona

myTextbox = lähettäjä

 Dim IndexChar kokonaislukuna = 

 myTextbox. Teksti. Sisällysluettelo( 

 SearchString. Teksti)

 Jos IndexChar = -1 Sitten _

 Ei löydetty. Teksti = "Ei löydy" _

 Muu _

 Ei löydetty. Text = "Löytyi!"

 End Sub

Äskettäin ohjelmoija pyysi minulta parempaa tapaa "poistaa rivi, jota napsautettiin missä tahansa kuudesta määritellystä luettelosta". Hänellä se toimi parikymmentä rivillä koodia, joka yksinkertaisesti hämmentää minua. Mutta lähettäjän avulla se oli todella melko yksinkertainen:

Yksityinen aliluetteloBox_Click ( 

 ByVal-lähettäjä objektina, 

 ByVal e As -järjestelmä. EventArgs

 ) Käsittelee ListBox1.Click, ListBox2.Click

 Himmennä myListBox uutena listaikkuna

 myListBox = lähettäjä

 myListBox. Kohteita. PoistaAt (myListBox. SelectedIndex)

End Sub

Vielä yksi esimerkki kohtaan on kysymys, jonka Pierre lähetti Belgiassa. Pierre testasi Button1: n ja lähettäjän tasa-arvoa On esineiden operaattori:

Jos lähettäjä on Button1 Sitten ...

Tämä on syntaktisesti oikein, koska lähettäjä ja Button1 ovat molemmat objektit, joihin voidaan viitata. Ja koska lähettäjä todella on identtinen Button1: n kanssa, miksi se ei toimi?

Vastaus riippuu avainsanasta, joka löytyy hieman aikaisemmin lausunnosta. Tarkistetaan ensin Microsoftin dokumentaatio On operaattori.

Visual Basic vertaa kahta objektiohjelmamuuttujaa Is Operaattoriin. Tämä operaattori määrittelee, viittaavatko kaksi referenssimuuttujaa samaan objekti-esiintymään.

Huomaa, että lähettäjä on ohitettu ByVal. Tämä tarkoittaa, että kopio Button1: stä välitetään, ei varsinainen objekti itse. Joten kun Pierre testaa onko lähettäjä ja Button1 samat ilmentymät, tulos on väärä.

Testaaksesi, onko Button1 tai Button2 napsautettu, sinun on muutettava lähettäjä todelliseksi Button Objectiksi ja testattava sitten kyseisen objektin ominaisuus. Tekstiä käytetään yleensä, mutta voit testata arvoa Tagissa tai jopa Sijainti-ominaisuudessa.

Tämä koodi toimii:

Himmennä myButton As Button

myButton = lähettäjä

Jos myButton. Teksti = "Button1" Sitten

instagram story viewer