Vb. Neto sūtītāja un notikumu parametri

VB6 gadījumā notikumu apakšprogramma, piemēram, Button1_Click, bija daudz mazāk sarežģīta, jo sistēma subprogrammu sauca stingri pēc nosaukuma. Ja pastāvēja Button1_Click notikums, sistēma to sauca. Tas ir tiešs un saprotams.

Bet VB.NET ir divi svarīgi jauninājumi VB.NET SOOPercchedd (tas ir Objektorientētā programmēšana).

  1. Klauzula “Rokturi” kontrolē, vai sistēma izsauc apakšprogrammu, nevis vārdu.
  2. Sūtītāja un e parametri tiek nodoti apakšprogrammai.

Parametru izmantošana

Apskatīsim vienkāršu piemēru, lai redzētu atšķirību, ko parametri rada VB.NET.

Privāta apakšpoga1_klikšķis ( 

 ByVal sūtītājs kā sistēma. Objekts,

 ByVal e As System. EventArgs

 ) Rokturi Button1.Click

 'Jūsu kods ir šeit

Beigas apakš

Pasākumu apakšprogrammas vienmēr saņem objektu “sūtītājs” un sistēmas EventArgs parametru “e”. Tā kā parametrs EventArgs ir objekts, tas atbalsta visas nepieciešamās īpašības un metodes. Piemēram, vecā VB6 MouseMove notikuma apakšprogramma, ko izmantoja četru parametru saņemšanai:

  • Poga kā vesels skaitlis
  • Maiņa kā vesels skaitlis
  • X kā viens
  • Y Kā vientuļnieks
instagram viewer

Kad progresīvākas peles iznāca ar vairāk pogām, VB6 radās reāla problēma tās atbalstīt. VB.NET iziet tikai vienu MouseEventArgs parametru, bet tas atbalsta daudz vairāk rekvizītu un metožu. Un katrs no tiem ir objekti, kas atbalsta vēl vairāk. Piemēram, e. Pogas īpašumā ir visas šīs īpašības:

  • Kreisais
  • Vidū
  • Taisnība
  • Nav
  • XButton1
  • XButton2

Ja kāds izgudro "transsendentālu" peli ar "virtuālu" pogu, VB.NET būs tikai jāatjaunina .NET Framework, lai to atbalstītu, un neviens iepriekšējais kods tā rezultātā netiks sagrauts.

Ir vairākas .NET tehnoloģijas, kas ir absolūti atkarīgas no šiem parametriem. Piemēram, tā kā personālajam personālajam datoram parasti ir tikai viens ekrāns, lai parādītu grafiku, jūsu kodam ir jāapvieno izveidotā grafika tajā pašā attēlā, kuru izmanto Windows. Šī iemesla dēļ ir jādalās ar vienu “grafikas” objektu. Galvenais veids, kā jūsu kods var izmantot šo "grafikas" objektu, ir izmantot e parametru, kas ir nodots OnPaint pasākumam ar objektu PaintEventArgs.

Aizsargāts ignorē sub OnPaint (

 ByVal e As System. Windows. Veidlapas. PaintEventArgs)

 Dim g as Graphics = e. Grafika

Citi piemēri

Ko jūs vēl varat darīt ar šiem parametriem? Lai ilustrētu, pieņemsim, ka vēlaties noskaidrot, vai virkne, iespējams, kaut kas, ko ievadījāt tekstlodziņā, pastāv kādā no citu tekstu lodziņu kolekcijām, kad jūs noklikšķiniet uz vienas. Jūs varētu kodēt dažus desmitus praktiski identisku apakšprogrammu katram tekstlodziņam:

Ja TextBox42.Text. IndexOf (

 SearchString. Teksts) = -1 

 Tad NotFound. Teksts = 

 "Nav atrasts"

Bet tas ir daudz vieglāk kodēt tikai vienu un ļaut tam apstrādāt visus tos. Sūtītāja parametrs atklās, uz kura tekstlodziņa ir noklikšķināts.

Privāts apakšmeklējums (

 ByVal sūtītājs kā sistēma. Objekts,

 ByVal e As System. EventArgs

 ) Rokturi TextBox1.Enter, 

 TextBox2.Enter, 

... un vēl un vēl.. .

 TextBox42.Enter

 Dim myTextbox kā TextBox

myTextbox = sūtītājs

 Dim IndexChar kā vesels skaitlis = 

 myTextbox. Teksts. IndexOf ( 

 SearchString. Teksts)

 Ja IndexChar = -1, tad _

 Nav atrasts. Teksts = "Nav atrasts" _

 Citādi _

 Nav atrasts. Teksts = "Atrasts!"

 Beigas apakš

Nesen kāds programmētājs man prasīja labāku veidu, kā "izdzēst līniju, uz kuras tika noklikšķināts kādā no sešiem norādītajiem sarakstiem". Viņam tas darbojās pāris desmitos koda rindiņu, kas mani vienkārši mulsināja. Bet, izmantojot sūtītāju, tas tiešām bija diezgan vienkārši:

Privāts apakšsarakstsBox_Click ( 

 ByVal sūtītājs kā objekts, 

 ByVal e As System. EventArgs

 ) Rokturi ListBox1.Click, ListBox2.Click

 Dim myListBox kā jauns ListBox

 myListBox = sūtītājs

 myListBox. Priekšmeti. RemoveAt (myListBox. SelectedIndex)

Beigas apakš

Vēl viens piemērs, kā izskaidrot punktu, ir jautājums, kuru iesūtīja Pjērs Beļģijā. Pjērs pārbaudīja Button1 un sūtītāja vienlīdzību, izmantojot Ir objektu operators:

Ja sūtītājs ir Button1, tad ...

Tas ir sintaktiski pareizi, jo gan sūtītājs, gan Button1 ir objekti, uz kuriem var atsaukties. Un tā kā sūtītājs tiešām ir identisks Button1, kāpēc tas nedarbojas?

Atbilde ir atkarīga no atslēgvārda, kas atrodams paziņojumā nedaudz agrāk. Vispirms pārbaudīsim Microsoft dokumentāciju Ir operators.

Visual Basic salīdzina divus objekta atsauces mainīgos ar Is Operator. Šis operators nosaka, vai divi atsauces mainīgie attiecas uz vienu un to pašu objekta gadījumu.

Ievērojiet, ka sūtītājs ir nodots ByVal. Tas nozīmē, ka tiek nodota Button1 kopija, nevis pats objekts. Tātad, kad Pjērs pārbauda, ​​vai sūtītājs un Button1 ir vieni un tie paši gadījumi, rezultāts ir nepatiess.

Lai pārbaudītu, vai ir noklikšķināts uz Button1 vai Button2, jums jāpārveido sūtītājs par faktisku Button objektu un pēc tam jāpārbauda šī objekta īpašums. Parasti tiek izmantots teksts, taču jūs varat pārbaudīt vērtību tagā vai pat atrašanās vietā.

Šis kods darbojas:

Dim myButton As Button

myButton = sūtītājs

Ja myButton. Teksts = "Button1" Tad