Vb. „Net Sender“ ir „e“ įvykių parametrai

VB6 programoje įvykio paprogramė, kaip „Button1_Click“, buvo daug mažiau sudėtinga, nes sistema pavadino paprogramę griežtai vardu. Jei egzistavo „Button1_Click“ įvykis, sistema tai vadino. Tai tiesioginė ir nesudėtinga.

Tačiau VB.NET yra du pagrindiniai atnaujinimai VB.NET SOOPercchedd (tai yra "OOP", skirtas Objektinis programavimas).

  1. „Rankenų“ sąlyga kontroliuoja, ar sistema vadina paprogramę, o ne pavadinimą.
  2. Siuntėjo ir e parametrai perduodami į paprogramę.

Parametrų naudojimas

Pažvelkime į paprastą pavyzdį, norėdami pamatyti skirtumą, kurį parametrai daro VB.NET.

Asmeninis antrinis mygtukas1_Spustelėkite ( 

 „ByVal“ siuntėjas kaip sistema. Objektas,

 „ByVal e As“ sistema. „EventArgs“

 ) Rankenėlės Mygtukas1.Spustelėkite

 'Jūsų kodas čia

Pabaigos poskyris

Įvykio paprogramės visada gauna „siuntėjo“ objektą ir sistemos „EventArgs“ parametrą „e“. Kadangi „EventArgs“ parametras yra objektas, jis palaiko visas savybes ir metodus, kurie yra būtini. Pvz., Senoji „VB6 MouseMove“ įvykio paprogramė buvo naudojama keturiems parametrams gauti:

instagram viewer
  • Mygtukas kaip sveikasis skaičius
  • „Shift As Integer“
  • X kaip vienišas
  • Y kaip vienišas

Kai labiau pažengusios pelės pasirodė su daugiau mygtukų, VB6 turėjo rimtų problemų jas palaikydamas. VB.NET perduoda tik vieną „MouseEventArgs“ parametrą, tačiau palaiko daug daugiau savybių ir metodų. Ir kiekvienas iš jų yra objektai, kurie palaiko dar daugiau. Pavyzdžiui, e. Mygtuko ypatybėje yra visos šios savybės:

  • Kairėje
  • Viduryje
  • Teisingai
  • Nė vienas
  • „XButton1“
  • „XButton2“

Jei kas nors sugalvos „transcendentinę“ pelę su „virtualiu“ mygtuku, VB.NET turės tik atnaujinti .NET Framework, kad ją palaikytų, ir joks ankstesnis kodas nebus sugadintas.

Yra nemažai .NET technologijų, kurios absoliučiai priklauso nuo šių parametrų. Pavyzdžiui, kadangi jūsų kompiuteryje paprastai yra tik vienas ekranas, kuriame rodoma grafika, jūsų kodas turi sujungti jo sukurtą grafiką į tą patį vaizdą, kurį naudoja „Windows“. Dėl šios priežasties reikia dalintis vienu „grafikos“ objektu. Pagrindinis būdas, kuriuo jūsų kodas gali naudoti tą „grafikos“ objektą, yra naudoti e parametrą, kuris yra perduota „OnPaint“ renginiui su objektu „PaintEventArgs“.

Apsaugotas nepaisymas „OnPaint“ (

 „ByVal e As“ sistema. „Windows“. Formos. „PaintEventArgs“)

 Dim g Kaip Grafika = e. Grafika

Kiti pavyzdžiai

Ką dar galite padaryti su šiais parametrais? Norėdami iliustruoti, tarkime, kad norite sužinoti, ar eilutė, galbūt kažkas, ką įvedėte į „Textbox“, yra bet kuriame kitame teksto dėžučių rinkinyje, kai jūs jį spustelite. Galite užkoduoti keliasdešimt praktiškai tapačių paprogramių kiekvienam teksto laukeliui:

Jei „TextBox42.Text“. IndexOf (

 „SearchString“. Tekstas) = ​​-1 

 Tada „NotFound“. Tekstas = 

 "Nerastas"

Bet daug lengviau užkoduoti tik vieną ir leisti jam tvarkyti juos visus. Siuntėjo parametras parodys, kuris teksto laukas buvo spustelėtas.

Privatus antrinis radinys (

 „ByVal“ siuntėjas kaip sistema. Objektas,

 „ByVal e As“ sistema. „EventArgs“

 ) Rankenos „TextBox1.Enter“, 

 „TextBox2.Enter“, 

... ir dar ir toliau.. .

 „TextBox42.Enter“

 Dim myTextbox As TextBox

myTextbox = siuntėjas

 Dim IndexChar, kaip sveikasis skaičius = 

 „myTextbox“. Tekstas. IndexOf ( 

 „SearchString“. Tekstas)

 Jei „IndexChar“ = -1, tada _

 Nerastas. Tekstas = „Nerastas“ _

 Kitas _

 Nerastas. Tekstas = "Suradome!"

 Pabaigos poskyris

Neseniai vienas programuotojas manęs paprašė geresnio būdo „ištrinti eilutę, kuri buvo spustelėta bet kuriame iš šešių nurodytų sąrašų“. Jis jį veikė per keliasdešimt kodo eilučių, kurios mane tiesiog supainiojo. Bet naudojant siuntėją, tai buvo tikrai gana paprasta:

Privatus antrinis sąrašasBox_Click ( 

 „ByVal“ siuntėjas kaip objektas, 

 „ByVal e As“ sistema. „EventArgs“

 ) Rankenos „ListBox1.Click“, „ListBox2.Click“

 Sumažinkite „myListBox“ kaip naują „ListBox“

 myListBox = siuntėjas

 „myListBox“. Daiktai. Pašalinti „(„ myListBox “. SelectedIndex)

Pabaigos poskyris

Dar vienas pavyzdys, nurodantis mintį, yra klausimas, kurį Pierre atsiuntė Belgijoje. Pierre'as išbandė Button1 ir siuntėjo lygybę naudodamas Yra objektų operatorius:

Jei siuntėjas yra mygtukas1, tada ...

Tai sintaksine prasme teisinga, nes tiek siuntėjas, tiek mygtukas1 yra objektai, į kuriuos galima remtis. Ir kadangi siuntėjas iš tikrųjų tapatus su „Button1“, kodėl jis neveikia?

Atsakymas priklauso nuo raktinio žodžio, kuris šiek tiek anksčiau rastas teiginyje. Pirmiausia patikrinkime „Microsoft“ dokumentus Yra operatorius.

Visual Basic lygina du objekto atskaitos kintamuosius su „Is Operator“. Šis operatorius nustato, ar du atskaitos kintamieji nurodo tą patį objekto egzempliorių.

Atminkite, kad siuntėjas yra perduotas „ByVal“. Tai reiškia, kad perduodama „Button1“ kopija, o ne pats objektas. Taigi kai Pierre'as išbando, ar siuntėjas ir „Button1“ yra tas pats egzempliorius, rezultatas yra klaidingas.

Norėdami patikrinti, ar buvo spustelėtas mygtukas „Button1“ ar „Button2“, turite paversti siuntėją faktiniu „Button“ objektu ir išbandyti to objekto savybes. Paprastai naudojamas tekstas, tačiau vertę galite patikrinti žymoje ar net nuosavybės vietoje.

Šis kodas veikia:

Dim myButton As Button

myButton = siuntėjas

Jei mano mygtukas. Tekstas = „Button1“ Tada