Rubrik: Controls · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 26.10.01 |
TabStrip Control im Griff Das Beispiel zeigt, wie man mit einem kleinen Trick den einzelnen Registerkarten die gewünschten Steuerelemente zuweisen kann. | ||
Autor: Dieter Otter | Bewertung: | Views: 34.205 |
www.tools4vb.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Die Windows Common Controls beinhalten u.a. auch ein Registerkarten-Steuerelement - das TabStrip-Control. Man plaziert es auf die Form und legt über den Eigenschaften-Dialog komfortabel das Aussehen, die Verhaltensweise, und natürlich die benötigten Registerkarten mit ihren Bezeichnern fest.
Wie bekommt man aber nun die benötigten Steuerelemente in die einzelnen Register?
Zur Entwurfszeit lassen sich die Registerkarten ja nicht öffnen. Desweiteren lässt sich das TabStrip-Control auch nicht als Container für andere Steuerelemente verwenden. Also alles nur eine optische Täuschung?
Nein! Dieser Tipp zeigt, wie man gekonnt den einzelnen Registerkarten alle benötigten Steuerelemente zuordnen kann. Für jede Registerkarte wird ein Picture-Steuerelement benötigt, welches als Container für die einzelnen Steuerelemente dient. Am einfachsten ist es, wenn mann ein Steuerelementfeld erstellt, also Picture1(0) (Picture1 mit Index=0), Picture1(1) (Picture1 mit Index=1) usw. - je nachdem wieviele Registerkarten angezeigt werden sollen.
Per Programmcode "blendet" man dann immer nur eine PictureBox ein (Visible = True), je nachdem welche Registerkarte gerade aktiv ist.
Wichtig für den nachfolgenden Code: Die erste PictureBox muss zur Design-Zeit korrekt über das TabStrip-Control plaziert werden!
Private Sub Form_Load() Dim I As Integer ' Registerkarten positionieren With Picture1(0) For I = 1 To Picture1.UBound Picture1(I).Move .Left, .Top, .Width, .Height Next I End With ' 1. Registerkarte öffnen SetTabStrip 1 End Sub ' Registerkarten-Inhalt anzeigen Private Sub SetTabStrip(ByVal nTab As Integer) Dim I As Integer Dim Result As Integer With TabStrip1 Result = False If Not .SelectedItem Is Nothing Then _ Result = (.SelectedItem.Index = nTab) ' Wenn gewünschte Registerkarte noch nicht geöffnet ' ist, dann jetzt nachholen If Not Result Then DoEvents .SelectedItem = .Tabs(nTab) .Refresh DoEvents End If ' PictureBox ein/ausblenden For I = 0 To Picture1.UBound Picture1(I).Visible = (I = nTab - 1) Next I Picture1(nTab - 1).ZOrder 0 DoEvents ' Fokus auf das erste Element setzen On Local Error Resume Next Picture1(nTab - 1).SetFocus SendKeys "{TAB}", True On Local Error GoTo 0 End With End Sub ' Klick auf Registerkarte Private Sub TabStrip1_Click() With TabStrip1 If Not .SelectedItem Is Nothing Then SetTabStrip .SelectedItem.Index End If End With End Sub
Noch ein Hinweis:
Es kann ja durchaus sein, dass sich die einzelnen PictureBoxen zur Entwurfszeit überlagern (evtl. aufgrund ihrer Größe oder aber weil die PictureBoxen bereits exakt übereinander positioniert sind). Klickt man nun auf eine dieser PictureBoxen (oder wählt diese im Eigenschaften-Fenster aus), so erscheint diese evtl. nicht oder nicht vollständig. Über die Tatenkombination Strg+J lässt sich aber dann die gerade ausgewählte PictureBox in den Vordergrund bringen.