2009-07-31 5 views
0

Ich habe eine Winform mit 2 Baumansichten. Meine linke Baumansicht wird mit Daten von einem Adserver geladen, der durch Klicken auf eine Schaltfläche geladen wird. Dies löst meinen Hintergrundarbeiter aus, der meine Daten holt und meinen Baum aufbaut.Halten von Windows Forms Picturebox in der Mitte von TreeView

Jetzt deaktiviere ich das Treeview-Steuerelement und zeige eine Picturebox mit einem animierten GIF darauf. Wenn mein Hintergrundarbeiter fertig ist, aktiviere ich meine Baumansicht und verstecke meine Bilderbox.

Also was ich möchte ist, dass die Picturebox in der Mitte der Baumansicht bleibt. Beide Baumansichten befinden sich auf einem geteilten Container. also muss ich vielleicht die Grenzen dieser Panels bekommen? Wenn sich also die Größe des Formulars ändert, bleibt meine Bildbox schön in der Mitte der Baumansicht.

Antwort

0

Erstellen Sie ein Panel mit der gleichen Größe und Position Ihrer Treeview. Fügen Sie diese Baumansicht in das Bedienfeld ein und legen Sie sie auf DockStyle.Fill fest. Fügen Sie Ihr Bild zum Panel hinzu und setzen Sie den Anker auf AnchorStyles.None.

this.panel1.Controls.Add(treeView2); 
this.panel1.Controls.Add(pictureBox1); 

this.treeView2.Dock = DockStyle.Fill; 
this.pictureBox1.Anchor = AnchorStyles.None; 

Der Anker Stil AnchorStyles.None wird Ihre Bild-Box in der Mitte der Platte halten. Stellen Sie Ihre Bilderbox vor Ihre Baumansicht. Sobald Ihre Verarbeitung vorbei ist, verstecken Sie einfach das Bildfeld.

+0

Das war eine einfache Lösung :-) – Gerbrand

0

Nicht klar, wie Sie Ihr Formular einrichten, aber Sie möchten entweder die Logik in der Form Resize-Ereignis oder das TreeView Resize-Ereignis setzen.

Wenn eine der Größen geändert wird, platzieren Sie das Bild an der Stelle = halbwegs über den TreeView, minus die Hälfte der Breite Ihres Bildes, wiederholen Sie für die Höhe.

0
OnFormResize() 
{ 
    Point ul = new Point((Form.ClientRectangle.Width - pictureBox1.Width)/2, 
     (Form.ClientRectangle.Height - pictureBox1.Height)/2); 
    pictureBox1.Location = ul; 
} 
Verwandte Themen