A Karton vezérlőelemmel több lapos űrlapokat készíthetünk, mely nagyobb mennyiségű vezérlőelemek esetén az űrlapot sokkal rendezettebbé, átláthatóbbá teheti. Felépítése hasonló a már sok programnál alkalmazotthoz: adott számú lapfülek, melyekre kattintva az odatartozó lapot jeleníti meg, a ráhelyezett vezérlőelemekkel együtt. Létrehozása nem bonyolult, a mostani bejegyzésnek sem ez lesz a témája, hanem a formai megjelenése.
A vezérlőelem formázási lehetőségei ugyanis nem az igaziak. Keretet állítani, az összes fül színét változtatni vagy a hátterét módosítani ugyan nyilván fontos lehet, de használhatóság szempontjából feltételes formázás lehetősége nagyon hiányzik.
Ezzel el is jutottunk a gyakorlati problémához: azt szeretném elérni, hogy az egyes tabulátorokon lévő mezők értékéhez kötötten eltérő színűek legyenek a fülek. Miért hasznos ez? Képzeljünk el egy 6 tabból álló karton vezérlőelemet, mind a hat tabon lehetnek adatok, de nem kötelezőek. Honnan tudjuk, hogy melyik fülön van feltöltött adat? Végig kattintgatjuk őket. A problémát gyorsan megoldaná, ha mondjuk az adattal rendelkező tabok fülei eltérő háttérszínt vennének fel.
Az Access vezérlőeleme ezt a lehetőséget nem kínálja fel, ilyen formázási lehetőség nem áll rendelkezésre, ezért a VBA segítségét kell hívnunk.
Példa
Adott egy MS Access Űrlap, ami üzleteket jelenít meg, és az ahhoz tartozó szerződések adatait. Egy üzlethez maximum 6 szerződés tartozhat, mindegyik szerződés külön lapon van megjelenítve.
Az űrlap karton vezérlőelemét az alábbiak szerint szeretnénk módosítani:
- az adattal feltöltött lapok füleit zöld színnel jelölje;
- ha nincs adat, akkor legyen szürke;
- az aktuálisan kiválasztott lap füle fehér színű legyen.
Megoldás
Access űrlap tervező nézet
1.) Hozzunk létre 6 db címke (Label) vezérlő elemet, azonos mérettel és formázással, majd helyezzük egymás mellé őket úgy, hogy ne legyen szünet kettő között (ezek lesznek az új "fülek").
2.) Jelöljük ki a 6 db címkét, és hozzuk őket előtérbe a megjelenítés szempontjából: jobb egérgomb --> "Elhelyezés" --> "Előrehozás". Így most már ha más elemekre ráhúzzuk, akkor az előtérbe maradnak, kitakarva a többi elemet.
3.) Az eredeti tab fülekre ráhúzva kitakarja az eredetit, így már csak az általunk létrehozott, "álfülek" lesznek láthatóak az űrlapon.
VBA
Eljárások
0.) megjegyzés: a rekordléptetőkhöz külön eljárást írtam (JumpButton()), melyek elvégzik a megfelelő rekordra ugrást, de ez nem tartozik a tárgyhoz
1.) TabClick()
Public Sub TabClick(Optional iEventNumber As Integer = 1)
'1.) jump to the chosen tab
Controls("TAB_CONTRACT" & iEventNumber).SetFocus
'2.) open the colouration procedure
Call TabColouration(iEventNumber)
End Sub
Magyarázat:
- opcionális argumentum: ha nem adja meg, akkor az elsőt vesz alapértelmezett tabnak;
- ráugrik a kiválasztott tabra;
- meghívja a színező eljárást: TabColouration().
2.) TabColouration()
Public Sub TabColouration(Optional iEventNumber As Integer = 1)
'0.) inicialization
Dim lngFilledTabColour As Long, lngEmptyTabColour As Long, lngActiveTabColour As Long
Dim ctrlEventCode As Control, ctrltab_LE As Control
Dim i As Integer
lngFilledTabColour = RGB(196, 189, 151) 'green
lngEmptyTabColour = RGB(217, 217, 217) 'grey
lngActiveTabColour = RGB(255, 255, 255) 'white
'1.) colouration of each tabs according to the the fulfill of the "EventCode" boxes
For i = 1 To 6
Set ctrlEventCode = Controls("EventCode" & i)
Set ctrltab_LE = Controls("lbl_tabCONTRACT" & i)
If (ctrlEventCode.Value = "" Or IsNull(ctrlEventCode.Value) = True) Then
ctrltab_LE.BackColor = lngEmptyTabColour
Else
ctrltab_LE.BackColor = lngFilledTabColour
End If
Next
'2.) colouration of the actual tab
Controls("lbl_tabCONTRACT" & iEventNumber).BackColor Color = lngActiveTabColour
End Sub
Magyarázat:
- a használt színek deklarálása RGB kódokkal: lngFilledTabColour, lngEmptyTabColour, lngActiveTabColour;
- az összes tab végignézi, és a feltételek szerint használja a megadott színeket;
- legvégén az aktuális tabot külön színnel jelöli.
Meghívás:
eseményvezérlet eljárás: kattintásra (on-lick):
- egyes tabok: itt az aktuális tab számával hívja meg az eljárást,
- rekordléptetők: szám nélkül hívja meg, így az alapértelmezett az első tab lesz, ezekre ugrik rá
Űrlaptulajdonságok, eseményvezérlet eljárás: betöltésre (OnLoad):
- a karton vezérlőelemet tartalmazó űrlap megnyitásához.
Végeredmény:
A képeken jól látható a végeredmény: a Földszint 2-es üzlet esetében az 1. és a 4. szerződésen van érvényes adat, ezeket színezi, az aktuálisan kiválasztott tabot pedig fehérrel jelöli. Az 1 emelet 3-as üzletében az 1. és a 3. szerződés aktív, ezeket jelöli külön színnel.
A bemutatott példa zip-be tömörítve, forráskódokkal együtt letölthető az alábbi linkről: OfficeHelp.Blog.hu_tab_control.zip
A bejegyzés trackback címe:
Kommentek:
A hozzászólások a vonatkozó jogszabályok értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a Felhasználási feltételekben és az adatvédelmi tájékoztatóban.