A Vb. Net Sender és e esemény paraméterek

A VB6-ban az esemény szubrutin, mint például a Button1_Click, sokkal kevésbé volt bonyolult, mert a rendszer szigorúan név szerint hívta az alprogramot. Ha létezett Button1_Click esemény, a rendszer ezt hívta. Ez közvetlen és egyértelmű.

De a VB.NET-ben két fő frissítés történik VB.NET SOOPercharged (ez az "OOP" a Objektumorientált programozás).

  1. A „Fogantyúk” záradék szabályozza, hogy a rendszer az alprogramot hívja-e, nevet.
  2. A feladó és az e paraméterek átkerülnek az alprogramba.

Paraméterek használata

Nézzünk meg egy egyszerű példát, hogy megnézhessük a paraméterek különbségét a VB.NET-ben.

Privát algomb1_Click ( 

 A ByVal feladó mint rendszer. Tárgy,

 ByVal e As rendszer. EventArgs

 ) Kezeli a Button1.Click elemet

 - A kódod ide megy

Befejezés Sub

Az esemény alprogramjai mindig "küldő" objektumot és egy "EventArgs" rendszerparamétert kapnak "e" -ként. Mivel az EventArgs paraméter egy objektum, támogatja az összes szükséges tulajdonságot és módszert. Például a régi VB6 MouseMove esemény szubrutin négy paraméter fogadására szolgál:

instagram viewer
  • Gomb egész számként
  • Változás egész számként
  • X mint egyedülálló
  • Y mint egyedülálló

Amikor a fejlettebb egerek több gombbal jelentek meg, a VB6-nak valódi problémája volt a támogatásuk. A VB.NET csak egy MouseEventArgs paramétert ad át, de sokkal több tulajdonságot és módszert támogat. És mindegyik olyan objektum, amely még többet támogat. Például az e. A gombos tulajdonság a következő tulajdonságokat tartalmazza:

  • Bal
  • Középső
  • Jobb
  • Egyik sem
  • XButton1
  • XButton2

Ha valaki feltalál egy "trancendentális" egeret egy "virtuális" gombbal, a VB.NET-nek csak a .NET-keretrendszert kell frissítenie annak támogatása érdekében, és ennek eredményeként egyetlen korábbi kód sem fog törni.

Számos .NET technológia létezik, amelyek feltétlenül függenek ezen paraméterektől. Például, mivel a számítógépén általában csak egy képernyő jelenik meg a grafika megjelenítéséhez, a kódnak össze kell vonnia a létrehozott grafikát ugyanabba a képbe, amelyet a Windows használ. Ezért egyetlen "grafikai" objektumot kell megosztani. A legfontosabb módja annak, hogy a kód képes használni ezt a "grafikát", az e paraméter használata, azaz átkerült az OnPaint eseményre a PaintEventArgs objektummal.

Védett felülbírálja a Sub OnPaint programot (

 ByVal e As rendszer. Ablakok. Formákat. PaintEventArgs)

 Dim g as Graphics = e. Grafika

Egyéb példák

Mit tehetne még ezekkel a paraméterekkel? A szemléltetés céljából tegyük fel, hogy meg szeretné tudni, hogy létezik-e egy karakterlánc, esetleg valami, amit beírt a szövegdobozba, más szövegdobozok gyűjteményében, ha rákattintasz. Néhány tucat gyakorlatilag azonos alprogramot kódolhat minden szövegdobozhoz:

Ha a TextBox42.Text. Indexe(

 KeresendoString. Szöveg) = -1 

 Aztán NotFound. Szöveg = 

 "Nem található"

De sokkal könnyebb csak egyet kódolni, és hagyni, hogy mindet kezelje. A feladó paraméter feltárja, melyik szövegdobozra kattintottak.

Private Sub FindIt (

 A ByVal feladó mint rendszer. Tárgy,

 ByVal e As rendszer. EventArgs

 ) Kezeli a TextBox1.Enter programot, 

 TextBox2.Enter, 

... és tovább.. .

 TextBox42.Enter

 A myTextbox tompítása mint TextBox

myTextbox = feladó

 Dim IndexChar egész szám = 

 myTextbox. Szöveg. Indexe( 

 KeresendoString. Szöveg)

 Ha IndexChar = -1, akkor _

 Nem található. Szöveg = "Nem található" _

 Más _

 Nem található. Text = "Megtaláltam!"

 Befejezés Sub

Nemrégiben egy programozó kért tőlem egy jobb módszert, hogy "törölje azt a sort, amelyre kattintott a hat megadott lista bármelyikében". Néhány tucat sorban működött, ami egyszerűen összezavarott. De a feladó használatával ez tényleg nagyon egyszerű volt:

Privát allistaBox_Click ( 

 ByVal feladó mint objektum, 

 ByVal e As rendszer. EventArgs

 ) A ListBox1.Click, a ListBox2.Click kezeli

 Dim myListBox mint új listabox

 myListBox = feladó

 myListBox. Terméket. Eltávolítás (myListBox. selectedIndex)

Befejezés Sub

Még egy példa a kérdés felváltására egy kérdés, amelyet Pierre intézett Belgiumba. Pierre a Button1 és a feladó egyenlőségét vizsgálta a van objektumok kezelője:

Ha a feladó Button1, akkor ...

Ez szintaktikailag helyes, mivel a feladó és a Button1 objektumok egyaránt hivatkozhatók. És mivel a feladó valóban azonos a Button1-rel, miért nem működik?

A válasz egy kulcsszótól függ, amelyet egy kicsit korábban megtaláltak az állításban. Először ellenőrizze a Microsoft dokumentációját van operátor.

Visual Basic összehasonlítja két objektum-referenciaváltozót az Is Operator-tal. Ez az operátor meghatározza, hogy két referenciaváltozó ugyanazon objektumpéldányra utal-e.

Vegye figyelembe, hogy a feladó átadásra került ByVal. Ez azt jelenti, hogy a Button1 másolatát elküldjük, nem magát a tényleges tárgyat. Tehát, amikor Pierre megvizsgálja, hogy a feladó és a Button1 ugyanaz a példány -, az eredmény hamis.

Annak teszteléséhez, hogy a Button1-re vagy a Button2-re kattintottak-e, a küldőt valódi Button-objektummá kell alakítani, majd tesztelnie kell az objektum tulajdonságát. A szöveget általában használják, de tesztelhet egy értéket a Címke vagy akár a Hely tulajdonságban.

Ez a kód működik:

Tompítsa a myButton As gombot

myButton = feladó

Ha myButton. Szöveg = "Button1" Akkor

instagram story viewer