Adatátadás formok között
BEVEZETÉS
A következő részben olyan eszközöket mutatunk be ami kiváló példái az eseményvezérelt programozásnak. Különböző eseményeket mutatunk be ami megmutatja, hogy formok hogy kommunikálhatnak egymással.
ADATÁTADÁS FORMOK KÖZÖTT
A formok egymással könnyen tudnak kommunikálni. Egyszerűen a változókat, konstansokat globális szinten kell deklarálni. A kontrolok eseményit a formok is ismerik.
A következő példában bemutatjuk, hogy két form között adatok hogyan tudnak cserélődni. Bemutatjuk az egérkezelés és a grafika egyes elemeit.
Rajzolóprogram
Hozzunk létre egy Visual Basic projektet. A projekten tartalmaz egy formot, de nekünk két formra lesz szükségünk. Adjunk még egy formot a projekthez a Project/Add Form menüpont segítségéve
l.
Így a projekt-tallózóba két form jelenik meg a következő nevekkel: Form1, Form2.
A programunk egy kis rajzolóprogram lesz. A lényege az, hogy az egér eseményeivel fogunk az egyik formra rajzolni, a másik formon az egér állása szerint az aktuális koordinátákat írja ki. Ez lehet, hogy első olvasásra kicsit bonyolult, de nem fogunk olyan sok kódot gépelni, mindig csak az aktuális eseményeknek mondjuk meg, hogy mit csináljon. Ha azt akarjuk, hogy meg is jelenjen amit rajzoltunk, akkor a Form1 AutoRedraw tulajdonságát False-ra kell állítani.
A Form1 űrlapon hozzunk létre négy CommandButton-t. Három gomb a rajzolás színét állítja be, a negyedik a kilépésre szolgál. Az alábbi ábra szerint helyezzük el a gomboka
t.
A felső három gomb Caption tulajdonságából töröljük ki az értékeket, üresek legyenek a feliratok. A negyedik gombnak adjunk Kilépés nevet. A gombok hátterét a kódszerkezetben, a Form1_Load eseményében fogjuk beállítani BackColor tulajdonsággal. A gombok színei a Visual Basic beépített alapszínei a vbRed (piros), vbBlue (Kék), vbGreen (Zöld). Ha lefuttatjuk a programunkat akkor a gombok színei nem változnak meg. Ilyenkor a gombok Style tulajdonságát át kell állítani 1-Grafikus értékre, és már is látható lesz a gombok színei.
Private Sub Form_Load()
Form2.Show
Command1.BackColor = vbRed
Command2.BackColor = vbBlue
Command3.BackColor = vbGreen
End Sub
Rajzolás események
A következő lépésben a rajzolási eseményeket fogjuk elkészíteni. Az első esemény, amikor lenyomjuk (MouseDown) az egér gombját. Ilyenkor felvesszük a formon elhelyezkedő egérkurzort aktuális koordinátáit. A Form1 MouseDown esemény kódja.
Private Sub Form_MouseDown(Button As Integer, Shift As Integer,_
X As Single, Y As Single)
rajzol = True
Me.CurrentX = X
Me.CurrentY = Y
End Sub
Színek megadása
Azt szeretnénk, hogy az alkalmazás futása közben a szín gombokra kattintva az ecsetünk felvegye az alapszíneket. A színeket ismét a Visual Basic alapszíneivel adjuk meg. A gombok Click eseményeit szerkesszük az alábbiak szerint.
Private Sub Command1_Click()
ForeColor = vbRed
End Sub
Private Sub Command2_Click()
ForeColor = vbBlue
End Sub
Private Sub Command3_Click()
ForeColor = vbGreen
End Sub
Végül a negyedik gomb kilépés utasítását kell megadni.
Private Sub Command4_Click()
End
End Sub
Rajz koordináták kiíratása
Még nem végeztünk az alkalmazással. A kilépéssel egy kis problémánk lehet. Ha a Form1 bezárás gombjára kattintunk akkor a Form2 továbbra is futni fog. Ha egy alkalmazásból kilépünk akkor az indítóform Unload utasításába - a mi esetünkben a Form1 - kell beleírni az End kilépő parancsot.
Private Sub Form_Unload(Cancel As Integer)
Unload Form2
End Sub
Így az alkalmazásunk már működik.
Látjuk, hogy két űrlap milyen egyszerűen kommunikál egymással.
Most el fogjuk készíteni a formok kommunikációját, de előtte fel kell készíteni a Form2 űrlapot. Hozzunk létre a második űrlapon négy Label kontrollt. A kontrolloknak a Caption tulajdonsága legyenek a következők az ábra alapján. Két Label-nek ne adjunk semmilyen feliratot, mivel ide lesz kiíratva a Form1 aktuális X, Y koordinátái.
A Label-k betűtípusát változtassuk meg nagyobb méretre és félkövérre a Font tulajdonságnál.
Label kontrol megadása
Most készítsük el a koordináták kiíratását. Vissza kell térnünk a Form1-re és itt ahol a rajzolást készítsük kell szerkeszteni az adatátadást.. Ez a MouseMove ahol a pontok kerülnek a formra. A következő kódszerkezettel kell kibővíteni ezt az eseményt.
Form2.Label1.Caption = X
Form2.Label2.Caption = Y
Ez azt jelenti, hogy a Form2 Label1_2 felirata lesz az koordináta száma.
Futtassuk le az alkalmazást és látjuk az eredményt. Nem látjuk a Form2-t. Ilyenkor az a teendő, hogy a Form1_Load eseményébe engedélyezni kell a Form2 láthatóságát az alábbi kóddal.
Form2.Show
Így már látjuk, hogy mindig az aktuális koordináta kerül a Form2 felirataiba.
Kilépő parancs
Még nem végeztünk az alkalmazással. A kilépéssel egy kis problémánk lehet. Ha a Form1 bezárás gombjára kattintunk akkor a Form2 továbbra is futni fog. Ha egy alkalmazásból kilépünk akkor az indítóform Unload utasításába - a mi esetünkben a Form1 - kell beleírni az End kilépő parancsot.
Private Sub Form_Unload(Cancel As Integer)
Unload Form2
End Sub
Így az alkalmazásunk már működik.
Látjuk, hogy két űrlap milyen egyszerűen kommunikál egymással.
MouseMove esemény
A MouseMove esemény fogja rajzolni a pontokat formunkon. Az egérkurzor mozgása az aktuális koordinátáknál pontot fog rajzolni, így áll majd össze a szabadkézi ábránk.
Private Sub Form_MouseMove(Button As Integer, Shift As Integer,_
X As Single, Y As Single)
If rajzol Then
Line -(X, Y)
End If
End Sub
Rajzol logikai változó
változó értéke True lesz.
Private Sub Form_MouseUp(Button As Integer, Shift As Integer,_
X As Single, Y As Single)
rajzol = False
End Sub
MouseUp esemény
A rajzol logikai változóra azért van szükség, hogy tudjuk milyen az esemény állapota. Ezt deklaráljuk a General részben.
Dim rajzol As Boolean
A formok közötti kommunikáció a változók, konstansok átadását jelenti, de ehhez ezeket globális szinten kell deklarálni.