Entwickler-Ecke

WinForms - Scrollbar verhält sich komisch


Delete - Do 04.08.16 09:46
Titel: Scrollbar verhält sich komisch
Hallo Community, ich bin neu hier in diesem Forum.
Ich habe mal eine Frage. In der Designer Ansicht von VS 2015 habe ich mir ein UserControl erstellt, die Eigenschaft AutoScroll auf true gesetzt und das UserControl dann so bearbeitet, dass eine ScrollBar in der Designeransicht auftaucht. Dieses UserControl habe ich in einer DLL kompilliert und diese dann in einer Windows Forms Anwendung geöffnet. Wenn ich dieses UserControl nun öffne, erscheint diese ScrollBar nicht, aber ich kann mit dem Mausrad scrollen.

Meine Frage nun an euch: wie kann ich diese ScrollBar auch in der WinForm sichtbar machen?


Palladin007 - Do 04.08.16 10:03

Die AutoScrollBars sind nur sichtbar, wenn der angezeigt Inhalt auch größer ist als es Platz hat, oder wenn es sich außerhalb des sichtbaren Bereichs befindet.
Wenn Du eine 500x500 große Box hast, aber nur ein 200x200 großes Bild drin, macht das ja keinen Sinn, die ScrollBars anzuzeigen.
Wenn Du dieses Bild aber an Position X:400 und Y:400 schiebst, dann ist das Bild nicht mehr ganz sichtbar, was dazu führt, dass die Scrollbar angezeigt wird.

Das kannst Du im Designer ja mal ausprobieren.
Dazu einfach ein Panel in die Form legen und AutoScroll auf True setzen.
Dann in dieses Panel ein zweites Panel setzen und die Hintergrundfarbe ändern, damit man es auch gut sieht.
Wenn Du dann im Designer die Position des zweiten Panels oder dessen Größe änderst und dadurch sind Teile des Panels nicht mehr sichtbar, dann wird die jeweils benötigte Scrollbar angezeigt.


Delete - Do 04.08.16 10:32

Das UserControl ist ja sozusagen größer designt worden, als es sein soll.

So im DLL Öffner:
s2

Und so im Designer
s1

Wenn ich auf dejm UserControl nun ganz unten einmal draufklicke, dann aktiviere ich die Scrollfunktion. Ab dann kann ich mit dem Mausrad scrollen, aber keine ScrollBars sind vorhanden.


Th69 - Do 04.08.16 11:48

Hallo und :welcome:

AutoScroll funktioniert nur für untergeordnete WinForms-Controls.
Sind denn die dargestellten Objekte im UserControl eigenständige Steuerelemente (Controls) oder werden diese vom UserControl-Code aus gezeichnet?
Wenn ersteres, um was für Steuerelemente handelt es sich denn genau (Label, Button, ...)?


Ralf Jansen - Do 04.08.16 12:22

Hast du Autoscroll im Designer des UserControls eingestellt oder an dem UserControl im Designer der Form auf das du das UserControl geworfen hast?

Bedenke wenn du das im Control eingestellt hast ist das eher ein Default Wert. Dort wo du das benzutzt also im Form Designer könnte man das auch überschrieben haben.


Delete - Do 04.08.16 13:46

In der Bibliothek habe ich einfach auf das userControl geklickt und AutoScroll aktiviert. Auf diesem UserControl habe ich nur Labels, Buttons, Textboxen und PictureBoxes. Aber ich kann ja auf der WinForm scrollen, aber leider nur mit dem Mausrad.

PS: Auf der Winform befindet sich das UserControl auf einem Panel.


Th69 - Do 04.08.16 14:20

Welche Größe hat denn das Panel und welche das UserControl (+ Position)?
Es kann sein, daß das UserControl zu groß ist (aber nicht vollständig dargestellt wird - und dann werden nicht automatisch die Scrollbars angezeigt)!


Delete - Do 04.08.16 15:39

Panel:
Size: 978; 395
Location: 233; 25

UserControl:
Size: 961; 395
Location: 0; 0


Th69 - Do 04.08.16 15:45

Dann ist das wirklich eigenartig.
Und du hast auch überprüft, daß AutoScroll bei dem UserControl noch gesetzt ist?
Evtl. mußt du aber auch beim Panel (und Form) noch AutoScroll setzen?!
Ansonsten packe das UserControl mal direkt auf eine Form und überprüfe, ob es dann funktioniert.


Delete - Do 04.08.16 16:04

Man bin ich dumm. Ich hatte 2 UserControls in der DLL. Das eine war das mit dem AutoScroll und das andere hatte mehrere Buttons mit dem Panel. Das hat alles gestimmt. Aber auf der WinForm hatte das Panel eine vollkommen andere Größe. Aber vielen Dank. Nun funktioniert es :) :autsch:


Th69 - Do 04.08.16 17:19

Ja, so ist das manchmal (beim Programmieren). Wenn das Offensichtliche keine Fehlerursache ist, dann muß man manchmal quer denken und andere Möglichkeiten in Betracht ziehen. ;-)