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).
- A „Fogantyúk” záradék szabályozza, hogy a rendszer az alprogramot hívja-e, nevet.
- 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:
- 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