VB6-s oli sündmuse alamprogramm, nagu Button1_Click, palju vähem keeruline, kuna süsteem kutsus alamprogrammi rangelt nime järgi. Kui Button1_Clicki sündmus oli olemas, kutsus süsteem seda. See on otsene ja arusaadav.
Kuid VB.NET-is on kaks olulist uuendust VB.NET SOOPercharged (see on "OOP" jaoks Objektorienteeritud programmeerimine).
- Klausel "Käepidemed" kontrollib, kas süsteem kutsub alamprogrammi, mitte nime.
- Saatja ja e parameetrid edastatakse alamprogrammile.
Parameetrite kasutamine
Vaatame lihtsat näidet, et näha erinevust, mida parameetrid teevad VB.NET-is.
Privaatne alamnupp1_Kliki (
ByVal saatja kui süsteem. Objekt,
ByVal e As süsteem. EventArgs
) Käepidemed Button1.Click
'Sinu kood läheb siia
Lõpu alam
Sündmuse alamprogrammid saavad alati "saatja" objekti ja süsteemi EventArgs parameetri "e". Kuna parameeter EventArgs on objekt, toetab see kõiki vajalikke omadusi ja meetodeid. Näiteks vana VB6 MouseMove sündmuse alamprogramm, mida kasutati nelja parameetri vastuvõtmiseks:
- Nupp täisarvuna
- Nihuta täisarvuna
- X kui vallaline
- Y kui vallaline
Kui arenenumad hiired tulid välja rohkem nuppe, oli VB6-l neid toetades tõeline probleem. VB.NET läbib ainult ühe MouseEventArgs parameetri, kuid see toetab palju rohkem omadusi ja meetodeid. Ja igaüks neist on objektid, mis toetavad veelgi. Näiteks e. Nupu atribuut sisaldab kõiki neid atribuute:
- Vasak
- Keskel
- Õige
- Puudub
- XButton1
- XButton2
Kui keegi leiutab "virtuaalse" nupuga "transsentsiaalse" hiire, peab VB.NET selle toetamiseks värskendama ainult .NET Frameworkit ja selle tulemusel ükski eelmine kood ei purune.
Nendest parameetritest sõltub absoluutselt rida .NET-tehnoloogiaid. Näiteks kui teie arvutil on tavaliselt graafika kuvamiseks ainult üks ekraan, peab teie kood ühendama loodud graafika samasse pilti, mida kasutab Windows. Sel põhjusel tuleb jagada ühte "graafika" objekti. Peamine viis, kuidas teie kood saab seda "graafika" objekti kasutada, on e-parameetri kasutamine, mis on edastatud OnPainti sündmusele objektiga PaintEventArgs.
Kaitstud alistamine onPaint (
ByVal e As süsteem. Windows. Vormid. PaintEventArgs)
Dim g Nagu graafika = e. Graafika
Muud näited
Mida saab nende parameetritega veel teha? Näitlikustamiseks oletagem, et soovite teada saada, kas string, võib-olla midagi, mille olete sisestanud tekstikasti, eksisteerib mõnes muus tekstikasti kollektsioonis, kui sellele klõpsate. Iga tekstikasti jaoks saate kodeerida mõnikümmend praktiliselt ühesugust alamprogrammi:
Kui TextBox42.Text. Indeks(
Otsimisrihm. Tekst) = -1
Siis NotFound. Tekst =
"Ei leitud"
Kuid palju lihtsam on vaid üks kodeerida ja lasta tal kõigil nendega hakkama saada. Saatja parameeter näitab, millisele tekstikastile klõpsati.
Privaatne alamotsing (
ByVal saatja kui süsteem. Objekt,
ByVal e As süsteem. EventArgs
) Käsitseb TextBox1.Enter,
TextBox2.Enter,
... ja edasi ja edasi.. .
TextBox42.Enter
Tühjenda myTextbox kui tekstikast
myTextbox = saatja
Dim IndexChar täisarvuna =
myTextbox. Tekst. Indeks(
Otsimisrihm. Tekst)
Kui IndexChar = -1, siis _
Ei leitud. Tekst = "Ei leitud" _
Muu _
Ei leitud. Tekst = "Leitud!"
Lõpu alam
Hiljuti küsis üks programmeerija minult paremat viisi, kuidas "kustutada rida, millele klõpsati ükskõik millises kuuest täpsustatud loendist". Ta töötas paarikümnes koodireas, mis ajas mind lihtsalt segadusse. Kuid saatjat kasutades oli see tegelikult üsna lihtne:
Privaatne alamloendBox_Click (
ByVal saatja kui objekt,
ByVal e As süsteem. EventArgs
) Käsitleb nimekirjaBox1.Click, ListBox2.Click
Hämardage myListBox uue loendina
myListBox = saatja
myListBox. Esemed. EemaldaAt (myListBox. SelectedIndex)
Lõpu alam
Veel üks näide asja kohta on küsimus, mille saatis Belgias Pierre. Pierre katsetas Button1 ja saatja võrdsust, kasutades On objektide operaator:
Kui saatja on Button1 Siis ...
See on süntaktiliselt õige, kuna saatja ja Button1 on mõlemad objektid, millele saab viidata. Ja kuna saatja on tegelikult Button1-ga identne, siis miks see ei tööta?
Vastus sõltub märksõnast, mis on avalduses veidi varem leitud. Esiteks kontrollime Microsofti dokumentatsiooni On operaator.
Visual Basic võrdleb kahte objekti võrdlusmuutujat operaatoriga Is. See operaator tuvastab, kas kaks võrdlusmuutujat viitavad ühele ja samale objekti eksemplarile.
Pange tähele, et saatja on möödunud ByVal. See tähendab, et Button1 eksemplar on edasi antud, mitte tegelik objekt ise. Kui Pierre testib, kas saatja ja Button1 on samad eksemplarid, on tulemus vale.
Et testida, kas nupul Button1 või Button2 on klõpsatud, peate saatja muutma tegelikuks Button-objektiks ja seejärel testima selle objekti atribuuti. Tavaliselt kasutatakse teksti, kuid võite testida väärtust sildi või isegi asukoha atribuudis.
See kood töötab:
Eemalda myButton as Button
myButton = saatja
Kui myButton. Tekst = "Button1" Siis