2010-12-14 9 views
1

Ich habe ein Formular mit einem Bildlauffeld und zwei Steuerelementen, die genau übereinander liegen - ein sichtbares nicht. Basierend auf einer bestimmten Bedingung, wenn dieses Formular aktiviert ist, kann ich die sichtbaren Eigenschaften der beiden Steuerelemente vertauschen. Diese Steuerelemente befinden sich am unteren Rand des Bildlauffelds. Wenn ich dieses Formular verlasse, lasse ich es nach unten scrollen, ändere die Bedingung, die die Sichtbarkeit der Steuerelemente auslöst, und gehe zurück zu dieser Form. Das sichtbare Steuerelement wird um 200px nach unten fallen gelassen, was eine große Lücke hinterlassen hat. Wer weiß, was das verursachen könnte? Ich habe versucht, die Position der Bildlaufleiste beim Schließen des Formulars nach oben zurückzusetzen, aber das verursacht nur eine kleinere Lücke und manchmal das Steuerelement, um höher in andere Steuerelemente zu verschieben. Irgendwelche Ideen?Die Position der Bildlaufleiste bewegt sich sichtbar/nicht sichtbar wechselnde Bedienelemente

+1

plz Bild hinzufügen, so dass es leicht zu verstehen ist. –

Antwort

0

Keine Repro. Hört sich für mich an, dass Sie mehr tun, als nur die Eigenschaft "Sichtbar" zu ändern. Wenn Sie die Location-Eigenschaft zuweisen, müssen Sie die AutoScrollPosition hinzufügen, um den Bildlaufstatus zu kompensieren. Postleitzahl, wenn dies nicht hilft.

+0

Nun, es ist wirklich das einzige, was ich mache. Wenn ich den Code ausdekomme, um die Sichtbarkeit auf einem Steuerelement zu deaktivieren und auf einem anderen zu aktivieren und sie beide sichtbar zu lassen, bleiben beide an der gleichen Stelle und bewegen sich nie, egal wo ich die Formularscrollposition belasse. Ich werde aber mit AutoScrollPosition herumspielen und sehen, ob ich etwas nicht zum Arbeiten bekommen kann. Außerdem wird der Speicherort in den Steuerelementeigenschaften festgelegt - nicht programmgesteuert. – novacara

+0

Ich werde dies als beste Antwort markieren, weil es mich auf den richtigen Weg gebracht hat. Ich musste panel.AutoScrollPosition jedesmal auf (0,0) setzen, wenn ich das Formular verließ, da dies nur auftrat, wenn das Formular beim Scrollen beendet wurde. Ich glaube, ich habe das schon einmal ausprobiert, aber ich habe AutoScrollPosition auf das Formular und nicht auf das Panel eingestellt, also hat es natürlich nicht funktioniert. Ich bin mir immer noch nicht sicher, was hier vor sich geht, denn es funktioniert in jeder Hinsicht gut, wenn ich mich nicht mit der Sichtweise beschäftige, aber ... na ja! – novacara

1

Hier ist ein Beispiel, das das Problem reproduziert. Wenn die Maus über die rote Markierung bewegt wird, ändert sich die Sichtbarkeit von button2 in true, was bewirkt, dass der Bildlauf zurück zu Button1 springt.

public class Form123456 : Form { 

    public Form123456() { 
     Controls.Add(new UC1()); 
    } 

    public class UC1 : UserControl { 
     Button b1 = new Button { Text = "Button1" }; 
     Label lb = new Label { Text = "_", AutoSize = true, BackColor = Color.Red }; 
     Button b2 = new Button { Text = "Button2", Visible = false }; 
     Button b2b = new Button { Text = "x" }; 
     Button b3 = new Button { Text = "Button3" }; 
     public UC1() { 
      AutoScroll = true; 
      Dock = DockStyle.Fill; 
      b1.Location = new Point(0, 200); 
      b2.Location = new Point(0, 600); 
      lb.Location = new Point(70, 600); 
      b2b.Location = new Point(90, 600); 
      b3.Location = new Point(0, 800); 
      Controls.Add(b1); 
      Controls.Add(b2); 
      Controls.Add(lb); 
      Controls.Add(b2b); 
      Controls.Add(b3); 

      lb.MouseEnter += delegate { 
       b2.Visible = true; 
      }; 
      lb.MouseLeave += delegate { 
       b2.Visible = false; 
      }; 
     } 
    } 
} 

es zu beheben, ist eine Lösung, diesen Code hinzuzufügen:

protected override Point ScrollToControl(Control activeControl) { 
     return this.AutoScrollPosition; 
    } 

Lösung aus: Why does clicking in a text box cause an AutoScroll panel to scroll back to the top?

0

Haben Sie den Auftrag bestätigt, dass Sie die Sichtbarkeit der beiden Kontrollen ändern? Die Bildlaufleisten eines Containers, bei dem die automatische Bildlauffunktion auf "true" gesetzt ist, erscheinen und verschwinden je nach Position der Steuerelemente, die sich außerhalb des sichtbaren Bereichs des Steuerelements befinden. Steuerelemente, die nicht sichtbar sind, zählen nicht. In Ihrem Fall, wenn Sie beide Steuerelemente jederzeit unsichtbar machen, werden die Bildlaufleisten verschwinden. Sie kommen zurück, wenn ein Steuerelement sichtbar gemacht wird. Um sicherzustellen, dass Sie die Position der Bildlaufleiste und die Steuerelemente nicht überspringen, sollten Sie sicherstellen, dass beide Steuerelemente zu keiner Zeit unsichtbar sind. Eine andere Lösung ist eine pseudo-sichtbare Kontrolle über den Container. Das ist ein Steuerelement, bei dem die Sichtbarkeit auf "Wahr" gesetzt ist, aber für den Benutzer nicht sichtbar ist (z. B. ein Punkt mit der Farbe des Hintergrunds, ein Label ohne Text ...). Positionieren Sie dieses Steuerelement in der weitesten Position x, y und die Bildlaufleisten werden nie verschwinden.

Verwandte Themen