12.14 Bildlaufleisten (HScrollBar und VScrollBar)
Einige Windows-Komponenten, die automatisch Bildlaufleisten am Rand ihres Clientbereichs bereitstellen können, habe ich Ihnen bereits vorgestellt. Die Klasse TextBox gehört ebenso dazu wie die Klasse Form.
Mit HScrollBar und VScrollBar stehen Ihnen zwei Klassen zur Verfügung, um in einem Bereich stufenlos oder in vordefinierten Sprüngen Werte einzustellen, die von anderen Komponenten ausgewertet werden können. Beide Klassen beerben die gemeinsame Basisklasse ScollBar, die ihrerseits ein direkter Abkömmling von Control ist. HScrollBar ist eine horizontale Bildlaufleiste, VScrollBar eine vertikale. Bis auf die Orientierung sind beide Bildlaufleisten identisch.
Eigenschaften
Nur die fünf in Tabelle 12.15 gezeigten Eigenschaften kontrollieren die Bildlaufleisten. Das Steuerelement kann eine Wertskala zwischen einem definierten Minimum und einem Maximum beschreiben. Value gibt die aktuelle Position an. Klickt der Benutzer auf eine der beiden Pfeiltasten, ändert sich Value um einen Wert, der in SmallChange festgelegt ist. Bei einem Klick in den Bereich zwischen dem Bildlauffeld und einer Pfeiltaste ändert sich Value dagegen um einen Wert aus LargeChange.
Value erreicht zur Laufzeit den Wert Maximum nicht. Tatsächlich reicht der Wertebereich nur von Minimum bis
Maximum – LargeChange + 1
Warum ist der Maximalwert von Value ein anderer, als in Maximum festgelegt? Stellen Sie sich dazu ein Dokument vor, das 1000 Zeilen Text enthält, die von 0 bis 999 indiziert sind. Nehmen wir an, dass auf einer Seite 25 Zeilen angezeigt werden können. Um mit einem Mausklick von Seite zu Seite zu navigieren, legen Sie den Wert LargeChange=25 fest.
Wird die erste Seite angezeigt, handelt es sich um die Zeilen 0 bis 24. Dafür steht Value=0. Wird um LargeChange gescrollt, werden die Zeilen 25 bis 49 angezeigt. In diesem Moment hat Value den Wert 25. Die letzten 25 Zeilen des Dokuments (975 bis 999) werden angezeigt, wenn Value=975 aufweist. Der Maximalwert wird also überhaupt nicht benötigt, um durch das gesamte Dokument navigieren zu können.
Eigenschaft | Beschreibung |
Value |
Aktuelle Position des Bildlauffeldes |
Minimum |
Minimalwert |
Maximum |
Maximalwert |
SmallChange |
Betrag der Wertänderung von Value bei kleinen Schritten (»Zeile«) |
LargeChange |
Betrag der Wertänderung von Value bei großen Schritten (»Seite«) |
Ereignisse
Von der Basisklasse ScrollBar erben die beiden abgeleiteten Klassen zwei wichtige Ereignisse: ValueChanged und Scroll. In den meisten Fällen werden Sie das Ereignis ValueChanged behandeln, das immer dann auftritt, wenn sich die Eigenschaft Value der Bildlaufleiste geändert hat.
Scroll tritt auf, wenn das Bildlauffeld mit der Tastatur oder der Maus verschoben wird. Wird mittels Programmcode ein neuer Wert für Value gesetzt, wird Scroll nicht ausgelöst. Dessen zweiter Parameter vom Typ ScrollEventArgs liefert in seiner Eigenschaft NewValue den neu eingestellten Wert der Bildlaufleiste, in OldValue den alten.
Wird das Bildlauffeld mit der Tastatur oder der Maus verschoben, kommt es zu der Ereigniskette Scroll/ValueChanged/Scroll. Dabei zeigt sich, dass Value bei der ersten Auslösung von Scoll noch den alten Wert hat, bei der zweiten Auslösung den neuen.
Farbreglerbeispiel
Im folgenden Beispiel dient eine Instanz des Steuerelements PictureBox dazu, eine Fläche mit einer Hintergrundfarbe darzustellen, deren Rot-, Grün- und Blauanteil mittels Bildlaufleisten stufenlos eingestellt werden kann (siehe Abbildung 12.30). Die Eigenschaft Minimum der Bildlaufleisten steht auf 0, SmallChange auf 1 und LargeChange auf 15. Da Value den Wert 255 erreichen muss, berechnet sich Maximum zu:
255 + LargeChange – 1 = 269
Die Werte der drei Bildlaufleisten werden der klassengebundenen Methode FromArgb der Klasse Color übergeben, um daraus den passenden Farbwert zu generieren.
Abbildung 12.30 Formular des Beispiels »ScrollBars«
'...\WinControls\Container\ScrollBars.vb |
Public Class ScrollBars Private Sub Einfärben(ByVal sender As Object, ByVal e As EventArgs) _ Handles Rotwert.ValueChanged, Grünwert.ValueChanged, Blauwert.ValueChanged Farbe.BackColor = Color.FromArgb( _ Rotwert.Value, Grünwert.Value, Blauwert.Value) Rot.Text = Convert.ToString(Rotwert.Value) Grün.Text = Convert.ToString(Grünwert.Value) Blau.Text = Convert.ToString(Blauwert.Value) End Sub End Class
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.