2009-06-17 12 views
2

Ich habe ein Benutzersteuerelement erstellt, das eine Bezeichnung und eine Fortschrittsleiste enthält. Ich habe auch ein anderes Benutzersteuerelement erstellt, das nur ein Flow-Layout-Panel enthält, dessen Fließrichtung von oben nach unten gesetzt wurde. Wenn ich Ersteres zum Flow-Layout-Panel des Letzteren hinzufüge, möchte ich, dass es die maximale Menge an verfügbarem horizontalem Speicherplatz und die minimale Menge an vertikalem Platz verwendet, so dass die Standardhöhen des Labels und des Fortschrittsbalkens berücksichtigt werden. Gibt es eine Möglichkeit, dies zu tun?Abrufen eines Benutzersteuerelements zum Füllen seines Containers

Ich habe eine screenshot hochgeladen, um das Problem zu veranschaulichen. Das Benutzersteuerelement mit dem Label und der Fortschrittsanzeige ist rot und das Benutzersteuerelement mit dem Flow-Layout-Bedienfeld ist grün.

+0

Die Ursache des Problems scheint zu sein, dass das Hinzufügen von Steuerelementen zu einem FlowLayoutPanel, dessen FlowDirection auf TopDown eingestellt ist, dazu führt, dass sie verschwinden, wenn ihre Dock-Eigenschaft auf "Top" oder ihre Anchor-Eigenschaft auf "AnchorStyles.Left" gesetzt ist AnchorStyles.Right ". –

Antwort

2

einfach die Dock-Eigenschaft des Benutzersteuer ‚Top‘ ...

UserControl.Dock = System.Windows.Forms.DockStyle.Top; 
+0

Wenn Sie die Dock-Eigenschaft im Konstruktor des Benutzersteuerelements auf "Top" setzen, werden sie unsichtbar. Alles, was ich bekomme, ist das grüne Layout-Bedienfeld. –

1

Positionierung und Schichtung von Kontrollen festgelegt manchmal schwierig sein kann. Stellen Sie sicher, dass die Dock-Eigenschaft der grünen Ablaufsteuerung auf Füllen festgelegt ist. Beginnen Sie danach mit der Platzierung Ihrer Label-Steuerelemente und beginnen Sie mit der Positionierung. Sie können die Dock-Eigenschaft auf "Top" setzen, wenn Sie möchten, aber in den meisten Situationen bin ich kein großer Fan davon. Ich würde sagen, eines der wichtigsten Dinge, die beim Festlegen der Position von Steuerelementen zu beachten sind, insbesondere bei Verwendung der Dock-Eigenschaft, ist, dass die Reihenfolge von Bedeutung ist. Wenn Sie ein Steuerelement nicht sehen können (dh es scheint hinter anderen Steuerelementen versteckt zu sein), dann versuchen Sie die Reihenfolge neu zu bestimmen, in der sie zum übergeordneten Element hinzugefügt werden (in diesem Fall das Flusssteuerungsfeld). Wenn Sie den Designer in VS verwenden, können Sie dies tun, indem Sie mit der rechten Maustaste klicken und die Befehle "Send to Top/Bottom" verwenden (sehr nützlich bei der Verwendung der Dock-Eigenschaft). Außerdem können Sie sehen, welche Steuerelemente an der Stelle, an der Sie klicken).

Auch eine meiner Meinung nach oft übersehene Option ist die richtige Verwendung von Control.Anchor. Ich würde vorschlagen, es anzuschauen.

4

Ich denke, das Problem ist, weil Sie nicht wollen, dass die Steuerelemente "Flow", Sie wollen nur, dass sie die oberste Position in Ihrem Host-Steuerelement verbrauchen. Sie können die gewünschten Ergebnisse erzielen, indem Sie stattdessen ein normales Panel-Steuerelement verwenden. Fügen Sie einfach die untergeordneten Steuerelemente zur Controls-Auflistung des Containersteuerelements hinzu, und legen Sie anschließend das Dock des hinzugefügten Benutzersteuerelements auf "Top" fest.

 ChildDisplay dsp1 = new ChildDisplay(); 
     pnlHost.Controls.Add(dsp1); 
     dsp1.Dock = DockStyle.Top; 

     ChildDisplay dsp2 = new ChildDisplay(); 
     pnlHost.Controls.Add(dsp2); 
     dsp2.Dock = DockStyle.Top; 

     ChildDisplay dsp3 = new ChildDisplay(); 
     pnlHost.Controls.Add(dsp3); 
     dsp3.Dock = DockStyle.Top; 

Hinweis: Ersetzen Sie [ChildDisplay] durch den Namen des von Ihnen verwendeten UserControl.

Verwandte Themen