Frage

Ich arbeite an einem Programm, das ein Panel innerhalb eines Formulars bewegt. Ich verwende eine Scrollbar, um die Panels. Top -Eigenschaft zu ändern. Diese Eigenschaft erreicht jedoch nur -32768. In diesem Fall muss ich es viel höher (oder niedriger O0). Gibt es trotzdem, dass ich es in ein 32 -Bit -Int ändern kann, damit es bis zu –2147483648 steigen kann?


bearbeiten, Wenn ich klar werde, was ich versuche zu tun, werden Sie vielleicht nicht glauben, dass es schlecht für die Verwendbarkeit sein wird.

Gestern habe ich diese Frage gestellt:Wie benutze ich VSCROLLBAR und HSCROLLBAR zusammen mit einer Richtextbox?

Aber weil ich keine Antwort finden konnte und NO1 mir antwortete, musste ich mir einen anderen Weg nachdenken, um eine Richtextbox zu scrollen. Meine Lösung bestand also darin, die Höhe der Textbox -Höhe auf gleich (Textbox -Schrifthöhe * Gesamtzeilen) zu ändern. Das würde bedeuten, dass keine Scrollbars auf dem Textfeld angezeigt würden. Jetzt verwende ich die Bildlaufleiste, um die Textboxen oberste Position zu verschieben, um einen Pseudo -Scroll -Effekt zu erstellen. Es funktioniert perfekt, wenn das Textfeld etwa 2000 Zeilen mit 13 Pixeln als Schrifthöhe enthält. Aber danach ist es höher als ein 16 -Bit -Int. Deshalb muss ich es in ein 32 -Bit -Int ändern.

War es hilfreich?

Lösung

Die Windows -Scrollbars selbst sind an 16 -Bit -Werte gebunden. Die WinForm Scrollbars spiegeln nur diese Grenze wider. Sie können es nicht ändern, ohne Ihre eigene Scrollbar -Steuerung von Grund auf neu zu schreiben.

Aber das musst du nicht tun. Es gibt keinen physischen Grund, so viele Werte in einer Bildlaufleiste zu haben, da Sie es nicht feiner scrollen können als Pixel im Bildschirm, und Ihr Monitor ist nicht mehr als 30000 Pixel hoch (oder breit).

Das normale Muster besteht darin, Ihren Domänenwert durch eine geeignete Zahl zu teilen. Normalerweise reicht eine Konstante, aber Sie können auch Ihr Maximum verwenden. Dann verwenden Sie diesen Wert als die tatsächlichen Scrollbar -Indizes.

Nehmen wir beispielsweise an, Sie haben Werte, die von 0 bis 1200355 reichen. Sie können den Maximalwert der Bildlaufleiste bis 10000 bis 10000 und dann den aktuell ausgewählten Wert als MyScrollbar.Value*(10000/1200355) (oder ein solches - i abrufen Sie haben nicht die genaue Syntax zur Hand).

Ja, das bedeutet, dass Sie eine gewisse Präzision verlieren - Sie können keinen Wert in der Bildlaufleiste auswählen, der sich um nur 3 Einheiten unterscheidet. Wenn Sie diese Art von Präzision wirklich benötigen, ist die Scrollbar -Steuerung nicht das richtige Werkzeug.

Andere Tipps

Wenn Sie letztendlich ein Panel haben, das höher als die Grenze einer Scroll -Leiste bleibt, können Sie Ihren Scrollbar -Wert mit einem bestimmten Multiplikator multiplizieren.

 panel1.top = scrollbar1.value * 3;

Der Multiplikator kann jeder Wert sein, der für Ihre Bedürfnisse geeignet ist. Davon abgesehen ist ein Bildschirm von über 30000 Pixel ziemlich groß.

Zusätzlich können Sie Ihren Scroll -Balkenwert proportional zu Ihrem maximalen Wertebereich proportionieren lassen.

areaHeight = 60000;
scrolldelta = areaHeight / scrollbar1.MaxValue;

panel1.Top = scrolldelta * scrollbar1.value; 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top