Das Standard-Verhalten der beiden Windows.Forms-Steuerelemente 'HScrollbar' und 'VScrollbar' ist für viele Zwecke nur wenig geeignet (und für VB6-Umsteiger unerwartet). Stellt man nämlich die LargeChange-Eigenschaft auf einen Wert größer 1, kann man im Formular nicht mehr zwischen den Eigenschaften 'Minimum' und 'Maximum' scrollen, sondern erreicht nur noch die Obergrenze: Maximum - LargeChange + 1. (Besonders verwirrend: Diese eingeschränkte Obergrenze wird im Formular graphisch als Maximalwert dargestellt.) Spätestens dann, wenn man ein Scroller-Steuerelement benutzen will, um den Anwender die Elemente einer Collection auswählen zu lassen, - wobei die aktuelle Anzahl der Collection-Elemente mit der Maximum-Eigenschaft des Scroller-Steuerelements koordiniert ist -, erweist sich dessen Standardverhalten als ungeeignet. Man kann zwar statt dessen das 'Trackbar'-Steuerelement heranziehen, aber nicht jeder möchte diesen 'rustikalen Hebel' auf seinem Formular haben. Bei einer geringen Zahl von Collection-Elementen ist es möglich, die LargeChange-Eigenschaft des Scroller auf 1 zu setzen. Doch bei größeren Anzahlen ist diese Einstellung nicht mehr praktisch und man wird höhere Schrittweiten wählen. Folgt man der VB-Dokumentation, dann setzt man in diesem Fall die Maximum-Eigenschaft auf den Wert Maximum + LargeChange (- 1). Die Maximum-Eigenschaft des Scrollers korrespondiert nicht mit der Anzahl der Collection-Elemente. (Heikel: eine Fehlerquelle, insbesondere bei der Umstellung von VB6-Code!) Auszug aus dem Beispiel in der VB-Doku: Me.hScrollBar1.LargeChange = Me.hScrollBar1.Maximum / 10 ' Adjust the Maximum value to make the raw Maximum value attainable by user interaction. Me.hScrollBar1.Maximum += Me.hScrollBar1.LargeChangeLargeChange Als Alternative bietet es sich an, das Standardverhalten des ScrollBar-Steuerelements zu ändern, indem die entsprechenden Eigenschaften in einer Klasse geeignet überschrieben werden. Die Klasse 'clsHScrollbar' verlagert die erforderliche Anpassung zwischen der LargeChange-Einstellung und der Maximum-Eigenschaft in den Code dieser Klasse. Mit dem daraus resultierenden Steuerelement kann man - unabhängig von der LargeChange-Einstellung - zwischen den Ausprägungen 'Minimum' und 'Maximum' scrollen. Die beiden überschriebenen Eigenschaften können im Code wie gewohnt eingesetzt und die Werte beliebig verändert werden. (Nur zur Demonstration ist die maximale Ausprägung der LargeChange-Eigenschaft auf die halbe Breite der Scroll-Skala begrenzt worden.) Zur Verwendung des 'clsHScrollbar'-Steuerelements ist dem Projekt eine neue Klasse hinzuzufügen, in die der Code kopiert wird. In einer Windows-Form ist im Deklarationsteil folgendes zu ergänzen: Dim WithEvents myScroller As New clsHScrollBar Im Load-Ereignis des Formulars ist die Instanz von 'clsHScrollbar' der Steuerelement-Auflistung (namentlich) hinzuzufügen: Me.Controls.Add(myScroller) Die weitere Verwendung im Code entspricht dem HScrollbar-Steuerelement. ''' <summary> ''' Variante der HScrollbar, die zwischen den ''' Eigenschaften 'Minimum' und 'Maximum' scrollt, ''' unabhängig von der LargeChange-Einstellung ''' </summary> ''' <remarks></remarks> Public Class clsHScrollBar Inherits Windows.Forms.HScrollBar ' bei diesem Steuerelement geht es natürlich auch: ' Inherits Windows.Forms.VScrollBar ' sichtbares Skalen-Maximum Private gMaximum As Integer ''' <summary> ''' Standardkonstruktor (Standardeinstellungen) ''' </summary> Public Sub New() ' Standardeinstellungen der Scrollbar gMaximum = MyBase.Maximum Dim lc As Integer = MyBase.LargeChange MyBase.LargeChange = _ Maximal_Halbe_Skala(lc) Setze_Base_Maximum() End Sub ''' <summary> ''' Überschriebene Eigenschaft Maximum ''' koordiniert den Maximalwert mit LargeChange ''' </summary> ''' <value>Scroller-Maximum</value> ''' <returns>Scroller-Maximum</returns> Public Overloads Property Maximum() As Integer Get Return _ (MyBase.Maximum - MyBase.LargeChange + 1) End Get Set(ByVal value As Integer) gMaximum = value MyBase.LargeChange = _ Maximal_Halbe_Skala(MyBase.LargeChange) Setze_Base_Maximum() End Set End Property ''' <summary> ''' Überschriebene Eigenschaft LargeChange ''' koordiniert mit dem Maximalwert des Scollers ''' </summary> ''' <value>große Schrittweite</value> ''' <returns>große Schrittweite</returns> Public Overloads Property LargeChange() As Integer Get LargeChange = MyBase.LargeChange End Get Set(ByVal value As Integer) MyBase.LargeChange = _ Maximal_Halbe_Skala(value) Setze_Base_Maximum() End Set End Property ''' <summary> ''' Hilfsfunktion: LargeChange-Ausprägung wird ''' auf die halbe aktuelle Skalenbreite begrenzt ''' </summary> ''' <returns>LargeChange-Wert</returns> Private Function Maximal_Halbe_Skala( _ ByVal Wert As Integer) As Integer Dim skala As Integer = gMaximum - MyBase.Minimum + 1 If Wert > skala \ 2 Then Wert = skala \ 2 End If If Wert < 1 Then Wert = 1 Return Wert End Function ''' <summary> ''' Hilfsfunktion: ''' Maximum-Eigenschaft der Base anpassen ''' </summary> Private Sub Setze_Base_Maximum() MyBase.Maximum = _ gMaximum + MyBase.LargeChange - 1 End Sub End Class Dieser Tipp wurde bereits 20.473 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats September 2024 Dieter Otter Übergabeparameter: String oder Array? Mit der IsArray-Funktion lässt sich prüfen, ob es sich bei einem Übergabeparameter an eine Prozedur um ein Array oder einer "einfachen" Variable handelt. sevAniGif (VB/VBA) Anzeigen von animierten GIF-Dateien Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |