Vb. Neto pošiljatelj i parametri događaja

U VB6 podprogrami događaja, poput Button1_Click, bili su mnogo manje komplicirani, jer je sustav nazvao potprogram strogo po imenu. Ako je postojao Button1_Click događaj, sustav ga je pozvao. Izravno je i izravno.

Ali u VB.NET-u postoje dvije velike nadogradnje VB.NET SOOP naplaćuje (to je "OOP" za Objektno orijentirano programiranje).

  1. Odredba "Ručke" kontrolira hoće li sustav pozvati potprogram, a ne ime.
  2. Pošiljalac i e parametri prosljeđuju se u podprogramu.

Upotreba parametara

Pogledajmo jednostavan primjer kako bismo vidjeli razliku koju parametri prave u VB.NET-u.

Privatni pod gumb1_Click ( 

 ByVal pošiljalac kao sustav. Objekt,

 ByVal e kao sustav. EventArgs

 ) Ručke gumba1.Kliknite

 'Vaš kod je ovdje

Kraj Sub

Potprogrami događaja uvijek primaju objekt "pošiljatelj" i sistemski parametar EventArgs "e". Budući da je parametar EventArgs objekt, on podržava sva svojstva i metode potrebne. Na primjer, stari podprogram događaja VB6 MouseMove koji se koristio za primanje četiri parametra:

  • Gumb Kao Integer
  • Shift kao Integer
  • X Kao samci
  • Y Kao samci
instagram viewer

Kad su napredniji miševi izašli s više gumba, VB6 je imao stvarni problem s podrškom za njih. VB.NET prolazi samo jedan MouseEventArgs parametar, ali podržava puno više svojstava i metoda. A svaki od njih su predmeti koji podržavaju još više. Na primjer, e. Svojstvo gumba sadrži sva ova svojstva:

  • Lijevo
  • srednji
  • Pravo
  • nijedan
  • XButton1
  • XButton2

Ako netko izmisli "trancendentalni" miš pomoću "virtualnog" gumba, VB.NET će morati ažurirati samo .NET Framework da bi ga podržao i kao rezultat se neće slomiti prethodni kôd.

Postoji niz .NET tehnologija koje apsolutno ovise o tim parametrima. Na primjer, budući da vaše računalo obično ima samo jedan zaslon za prikaz grafike, vaš kôd mora spojiti grafiku koju stvara u istu sliku koju koristi Windows. Iz tog razloga, mora se dijeliti jedan "grafički" objekt. Glavni način na koji vaš kôd može upotrijebiti taj grafički objekt je korištenje e parametra koji je proslijeđen događaju OnPaint s objektom PaintEventArgs.

Zaštićeni poništavanja Sub OnPaint (

 ByVal e kao sustav. Windows. Obrasci. PaintEventArgs)

 Dim g kao grafika = e. Grafika

Ostali primjeri

Što još možete učiniti s tim parametrima? Za ilustraciju, pretpostavimo da želite otkriti postoji li niz, možda nešto što ste unijeli u Textbox, u bilo kojem od zbirki drugih Textbox-ova kad kliknete na jedan. Za svaki Textbox možete kodirati nekoliko desetaka gotovo identičnih podprograma:

Ako TextBox42.Text. IndexOf (

 SearchString. Tekst) = -1 

 Zatim NotFound. Tekst = 

 "Nije pronađeno"

Ali puno je lakše kodirati samo jedan i pustiti ga da obrađuje sve njih. Parametar pošiljatelja otkrit će na koji je Textbox kliknut.

Privatni pod FindIt (

 ByVal pošiljalac kao sustav. Objekt,

 ByVal e kao sustav. EventArgs

 ) Rukuje TextBox1.Enter, 

 TextBox2.Enter, 

... i dalje i dalje.. .

 TextBox42.Enter

 Zatamni myTextbox kao TextBox

myTextbox = pošiljalac

 Dim IndexChar As Integer = 

 myTextbox. Tekst. IndexOf ( 

 SearchString. Tekst)

 Ako je IndexChar = -1, tada _

 Nije pronađeno. Text = "Nije pronađen" _

 Ostalo _

 Nije pronađeno. Text = "Pronađeno!"

 Kraj Sub

Nedavno me jedan programer pitao za bolji način za "brisanje linije koja je bila kliknuta na bilo kojem od šest određenih popisa." Radio je u nekoliko desetaka redaka koda što me je jednostavno zbunilo. Ali pomoću pošiljatelja bilo je vrlo jednostavno:

Privatni potpopisBox_Click ( 

 ByVal pošiljatelj Kao predmet, 

 ByVal e kao sustav. EventArgs

 ) Rukuje ListBox1.Click, ListBox2.Click

 Zatamni myListBox kao novi ListBox

 myListBox = pošiljalac

 myListBox. Stavke. RemoveAt (myListBox. SelectedIndex)

Kraj Sub

Još jedan primjer da se umanji točka je pitanje koje je poslao Pierre u Belgiji. Pierre je testirao jednakost Buttona1 i pošiljatelja koristeći Je operator za objekte:

Ako je pošiljalac Button1, tada ...

To je sintaktički ispravno jer su pošiljatelj i Button1 objekti koji se mogu uputiti. A budući da je pošiljalac doista identičan s Buttonom1, zašto to ne uspije?

Odgovor ovisi o ključnoj riječi koja se nalazi malo ranije u izjavi. Prvo provjerimo Microsoftovu dokumentaciju za Je operater.

Visual Basic uspoređuje dvije referentne varijable objekta s operatorom Is. Ovaj operater određuje da li se dvije referentne varijable odnose na istu instancu objekta.

Obratite pažnju da je pošiljatelj prošao ByVal. To znači da je prenesena kopija gumba1, a ne sam stvarni objekt. Kada Pierre testira da li su pošiljalac i Button1 ista instanca, rezultat je netočan.

Da biste provjerili je li Button1 ili Button2 kliknuta, pošiljatelja morate pretvoriti u stvarni Button objekt i zatim testirati svojstvo tog objekta. Tekst se obično koristi, ali možete testirati vrijednost u oznaci ili čak entitetu Location.

Ovaj kod radi:

Zatamni moju tipku kao gumb

myButton = pošiljatelj

Ako je moj gumb. Tekst = "Gumb1" Zatim

instagram story viewer