Die ScrollableControl-Klasse hat 2 geschützte boolesche Eigenschaften: HScroll und VScroll.
Als Dokument sagt:
Ruft einen Wert ab, der angibt, ob die horizontale Bildlaufleiste sichtbar ist, oder legt diesen fest.
Und
AutoScroll behält die Sichtbarkeit der Bildlaufleisten automatisch bei. Daher hat das Festlegen der HScroll- oder VScroll-Eigenschaften auf true keine Auswirkungen, wenn AutoScroll aktiviert ist.
Also benutze ich sie so, aber die Bildlaufleiste wird nicht angezeigt:
%Vor%Wenn ich den folgenden Code verwende, funktioniert es:
%Vor%Wenn ich sie zusammenlege, ist die Bildlaufleiste immer noch unsichtbar, und die Werte von HScroll und HorizontalScroll.Visible behalten False.
%Vor%Also, was ist HSroll und VScroll wirklich?
Aktualisieren
Mein Code und Test
HScroll
wirkt sich nicht direkt auf die Scroll-Sichtbarkeit aus, aber verhindert, dass Scroll verborgen wird mit HorizontalScroll.Visible
value
Wenn HorizontalScroll.Visible
auf true
gesetzt wird als HScroll
erhält auch einen Wert true
(siehe 2. Zeile in der Tabelle)
Wenn AutoScroll
auf wahr gesetzt ist HorizontalScroll.Visible
bleibt immer true
und HScroll
hat keinen Einfluss (siehe die letzten 2 Zeilen)
Machen Sie eine App mit Control, die 3 Buttons mit dem nächsten Handler-Code enthält, und spielen Sie damit, um zu sehen, was genau dort passiert:
%Vor%false
) So zeigen Sie den Bildlaufsatz HorizontalScroll.Visible
bis true
Scroll-Set HScroll
manuell auf false
und dann HorizontalScroll.Visible
auf false
true
) HorizontalScroll.Visible
ist immer true
und kann nicht geändert werden
HScroll
wirkt sich nicht auf etwas aus
Also, was ist HSroll und VScroll wirklich?
Sie setzen sie auf "true", wenn Sie die Absicht zum Anzeigen der Bildlaufleisten haben. Aber das ist nicht genug, Sie müssen auch angeben, was sie anzeigen sollen. Eine Bildlaufleiste muss die Daumengröße, die minimale und maximale Position und die aktuelle Position kennen.
Sie kämpfen mit dem internen ApplyScrollbarChanges () Methode . Eine Sache ist es, die Bildlaufleisten auszublenden, auch wenn HScroll oder VScroll auf wahr gesetzt ist, wenn es nicht genügend Informationen zur Konfiguration der Balken hat. Der Code der Methode ist zu groß, um hier zu passen. Kurz gesagt leitet er diese Information von:
abPunkt 2 ist ein ansprechender Anpassungswinkel, aber sie haben die LayoutEngine-Klasse intern gemacht, sodass Sie keine eigene ableiten können. Punkt 3 unterscheidet sich nicht grundlegend von dem, was AutoLayout = true bereits tut. Es funktioniert jedoch, fügen Sie einfach ein Steuerelement im Konstruktor hinzu, überschreiben Sie OnClientSizeChanged (), um AdjustFormScrollbars (true) aufzurufen, und Sie sehen nun die Bildlaufleiste.
Was Punkt 1 übrig lässt, um die Bildlaufleisten zu steuern. Der Property-Setter sieht so . Yup, setzt es die AutoScroll-Eigenschaft hinter true zurück:)
Legen Sie einfach die AutoScrollMinSize-Eigenschaft fest, um die Bildlaufleisten zu steuern.
HScroll
zeigt die horizontale Bildlaufleiste an, wenn die Eigenschaft AutoScroll
nicht definiert ist.
In all Ihren Beispielen, in denen die Bildlaufleisten nicht angezeigt werden, liegt das daran, dass Sie AutoScroll
auf false setzen und die Anzeige von Bildlaufleisten ausblenden.
Tags und Links c# winforms scrollable