Die Bildlaufleiste wird beim Ändern des Bildlaufwerts nicht aktualisiert

8

Wenn VerticalScroll.Value in Panel mit AutoScroll auf true gesetzt wird, ändert sich die Bildlaufposition entsprechend, aber die Position des Daumens ändert sich nicht. Muss ich die Bildlaufleiste irgendwie aktualisieren ( Invalidate(true) im Panel funktioniert nicht)? Irgendwelche Ideen?

    
EricSchaefer 06.04.2011, 11:34
quelle

4 Antworten

24

Versuchen Sie, .PerformLayout();

aufzurufen     
KMån 06.04.2011, 11:46
quelle
6

Danke für den .PerformLayout() Tipp!

Es war nicht genug in meinem Fall, ich setze den VerticalScroll.Value in der Form Form.Shown Event-Handler, und aus irgendeinem Grund musste ich eine DoEvents Anweisung hinzufügen, damit das Scrollen funktioniert.

Hier ist mein Shown Event-Handler:

%Vor%

Das ScrollPanel-Steuerelement hat den Typ System.Windows.Forms.Panel .

Ohne die Zeile Application.DoEvents() wurde die Einstellung für den vertikalen Bildlauf vollständig ignoriert.

Ich dachte, es könnte für jemand anderen nützlich sein.

    
Julien P 18.04.2013 14:28
quelle
0

Ich hatte genau das gleiche Problem, als ich versuchte, ein Panel mit einer Bildbox automatisch zu scrollen.

Ich habe eine andere Methode gefunden, damit es funktioniert. Erhöhen Sie den Bildlaufwert zweimal:

%Vor%

Wenn Sie den Wert zum ersten Mal erhöhen, wird das Bildfeld innerhalb des Fensters verschoben, aber der Wert ändert sich nicht und der Daumen bewegt sich nicht.

Wenn Sie den Wert ein zweites Mal erhöhen, wird VerticalScroll.Value erhöht, indem Sie den Daumen bewegen, aber das Bildfeld wird nicht erneut gescrollt.

Scheint mir wie ein Käfer. Sicherlich sollte sowohl das Scrollen der Bildbox als auch das Erhöhen des Wertes und der Bewegung des Daumens nach der ersten Codezeile erfolgen.

    
JJMcLellan 21.07.2016 17:35
quelle
0

Ich stieß auf etwas fast identisches, wo ich eine PictureBox (eine Grafik) in einem Panel mit Bildlaufleisten habe, und ich möchte die Mauszeigerposition "scheinbar" stationär vergrößern oder verkleinern. Wenn Sie die PictureBox innerhalb des Bedienfelds neu positionieren, wird die Synchronisierung mit den Bildlaufleisten aufgehoben, und danach wird beim Scrollen mit den Bildlaufleisten nicht der gesamte Bereich der PictureBox angezeigt. Die Lösung besteht darin, die Verschiebung durchzuführen, indem Sie den Eigenschaften panel.HorizontalScroll.Value und / oder panel.VerticalScroll.Value einen berechneten Wert zuweisen. Aber das ist nicht genug: Eine dieser beiden Lösungen ist erforderlich, damit sich die Anwendung wie vorgesehen verhält:

  1. KMans Lösung oben:

    %Vor%
  2. Oder JJMcLellan's Lösung oben: in meinem Fall den berechneten Wert zweimal zuweisen, z. B .:

    %Vor%

Eines davon scheint die gleichen Endergebnisse zu haben. Da # 2 oben aussieht wie ein Fehler, und # 1 scheint (hoffentlich) von Microsoft (?) Entworfen zu sein, landete ich # 1 in meiner Anwendung. Ich wollte nur diese beiden Arbeiten in einer VB.NET-Umgebung bestätigen.

    
V. Wheeler 29.08.2017 16:54
quelle

Tags und Links