Vb. Parametre udalosti Net Sender a e

click fraud protection

Vo VB6 bol podprogram udalostí, napríklad Button1_Click, oveľa menej komplikovaný, pretože systém nazýval podprogram prísne menom. Ak existovala udalosť Button1_Click, systém ju nazval. Je to priame a priame.

Ale vo VB.NET existujú dve hlavné aktualizácie VB.NET Nabité na SOOP (to je „OOP“ pre Objektovo orientované programovanie).

  1. Klauzula "Rukoväte" riadi, či systém volá podprogram, nie meno.
  2. Parametre odosielateľa a e sa odovzdajú do podprogramu.

Použitie parametrov

Pozrime sa na jednoduchý príklad a zistíme, aký rozdiel majú parametre vo VB.NET.

Private Sub Button1_Click ( 

 ByVal odosielateľ ako systém. objekt,

 ByVal e As System. EventArgs

 ) Rukoväte Button1.Click

 „Váš kód ide sem

End Sub

Podprogramy udalostí vždy prijímajú objekt „odosielateľ“ a systémový parameter EventArgs „e“. Pretože parameter EventArgs je objekt, podporuje všetky potrebné vlastnosti a metódy. Napríklad starý podprogram udalosti VB6 MouseMove slúži na príjem štyroch parametrov:

  • Tlačidlo ako celé číslo
  • Shift As Integer
  • X ako slobodný
  • Y ako slobodný
instagram viewer

Keď vyšli pokročilejšie myši s viacerými tlačidlami, mal VB6 skutočný problém s ich podporou. VB.NET odovzdáva iba jeden parameter MouseEventArgs, ale podporuje omnoho viac vlastností a metód. A každý z nich sú objekty, ktoré ešte viac podporujú. Napríklad e. Vlastnosť button obsahuje všetky tieto vlastnosti:

  • Left
  • prostredný
  • Správny
  • nikto
  • XButton1
  • XButton2

Ak niekto vymyslí „transcendentálnu“ myš pomocou tlačidla „virtuálny“, VB.NET bude musieť iba aktualizovať .NET Framework, aby ju podporoval, a v dôsledku toho sa nezruší žiadny predchádzajúci kód.

Existuje niekoľko technológií .NET, ktoré absolútne závisia od týchto parametrov. Napríklad, pretože váš počítač má zvyčajne iba jednu obrazovku na zobrazenie grafiky, váš kód musí zlúčiť grafiku, ktorú vytvára, do rovnakého obrázka, aký používa systém Windows. Z tohto dôvodu je potrebné zdieľať jeden „grafický“ objekt. Hlavným spôsobom, ako je váš kód schopný použiť tento „grafický“ objekt, je použitie parametra e, ktorý je odovzdané udalosti OnPaint s objektom PaintEventArgs.

Chránené nahradenia Sub OnPaint (

 ByVal e As System. Windows. Formy. PaintEventArgs)

 Dim g As Graphics = e. grafika

Ďalšie príklady

Čo ešte môžete urobiť s týmito parametrami? Na ilustráciu predpokladajme, že chcete zistiť, či reťazec, možno niečo, čo ste zadali do textového poľa, existuje v niektorom zo zbierky iných textových polí, keď naň kliknete. Pre každé textové pole by ste mohli naprogramovať niekoľko desiatok prakticky identických podprogramov:

Ak TextBox42.Text. indexOf (

 SearchString. Text) = -1 

 Potom NotFound. Text = 

 "Nenájdené"

Je však oveľa jednoduchšie kódovať iba jeden a nechať ho zvládnuť všetky. Parameter odosielateľa odhalí, na ktoré textové pole sa kliklo.

Private Sub FindIt (

 ByVal odosielateľ ako systém. objekt,

 ByVal e As System. EventArgs

 ) Rukoväte TextBox1.Enter, 

 TextBox2.Enter, 

... a ďalej a ďalej.. .

 TextBox42.Enter

 Dim myTextbox As TextBox

myTextbox = odosielateľ

 Dim IndexChar As Integer = 

 myTextbox. Text. indexOf ( 

 SearchString. Text)

 Ak IndexChar = -1 Potom _

 Nenájdené. Text = "Nenájdené" _

 Inak _

 Nenájdené. Text = "Našlo sa!"

 End Sub

Programátor ma nedávno požiadal o lepší spôsob, ako „odstrániť riadok, na ktorý sa kliklo v ktoromkoľvek zo šiestich určených zoznamov“. Mal to fungovať v niekoľkých desiatkach riadkov kódu, ktoré ma jednoducho zmiatli. Ale pomocou odosielateľa to bolo celkom jednoduché:

Private Sub ListBox_Click ( 

 Odosielateľ ByVal ako objekt, 

 ByVal e As System. EventArgs

 ) Popisy ListBox1.Click, ListBox2.Click

 Dim myListBox ako nový ListBox

 myListBox = odosielateľ

 myListBox. Položky. RemoveAt (myListBox. SelectedIndex)

End Sub

Ďalším príkladom na vyriešenie tohto problému je otázka, ktorú zaslal Pierre v Belgicku. Pierre testoval rovnosť Button1 a odosielateľa pomocou Je operátor pre objekty:

Ak je odosielateľ Button1, potom ...

Toto je syntakticky správne, pretože odosielateľ aj Button1 sú objekty, na ktoré sa dá odkazovať. A pretože odosielateľ je skutočne totožný s Button1, prečo to nefunguje?

Odpoveď závisí od kľúčového slova, ktoré sa nachádza vo výpise o niečo skôr. Najprv skontrolujte dokumentáciu spoločnosti Microsoft pre Je operátor.

Visual Basic porovnáva dve premenné referencie na objekt s operátorom Is. Tento operátor určí, či sa dve referenčné premenné vzťahujú na tú istú inštanciu objektu.

Všimnite si, že odosielateľ je odovzdaný byVal. To znamená, že je odovzdaná kópia Button1, nie samotný skutočný objekt. Takže keď Pierre testuje, či sú odosielateľ a Button1 rovnakou inštanciou, výsledkom je False.

Ak chcete otestovať, či sa kliklo na Button1 alebo Button2, musíte premeniť odosielateľa na skutočný Button objekt a potom otestovať jeho vlastnosť. Text sa zvyčajne používa, ale môžete otestovať hodnotu v značke alebo dokonca vo vlastnosti Location.

Tento kód funguje:

Dim myButton As Button

myButton = odosielateľ

Ak je myButton. Text = "Button1" Potom

instagram story viewer