2009-08-31 2 views
20

ich ein UserControl, die aus einem Label (Top) besteht, ein FlowLayoutPanel (Fill, TopDown Strom und keine Wrap) und eine Panel (unten). Das Benutzersteuerelement erstellt eine Reihe von Steuerelementen basierend auf einer Liste von Daten, die es erhält, und fügt sie der FlowLayoutPanel hinzu.C#: Wie man einen Benutzer Kontrolle bekommen, um richtig Autogrße selbst

Wie kann ich diese UserControl richtig Größe ändern, so dass die FlowLayoutPanel keine Bildlaufleisten hat? Ich habe versucht, verschiedene Kombinationen von AutoSize und AutoSizeMode über die FlowLayoutPanel und die UserControl selbst zu verwenden, aber ich kann nicht scheinen, es funktioniert zu bekommen. Entweder lande ich mit etwas, das sich nicht selbst verändert, oder es wird nicht groß genug oder zu fast nichts zerquetscht.

Antwort

11

Vielen Dank für alle Vorschläge der Größe verändern können. Die Lösung schien diesmal AutoSize zu true für sowohl die FlowLayoutPanelals auch dieUserControl selbst einzustellen.

Jetzt, wie man das Formular erhält, das dieses UserControl sowie einige andere Kontrollen enthält, die ich im Moment nicht ziemlich herausfinden kann, aber ich denke, dass das eine getrennte Frage sein sollte ...

+0

Haben Sie es geschafft, den letzten Teil zu lösen? – Macke

+0

@Macke Das war vor 6 Jahren, also habe ich keine Ahnung, hehe. Vielleicht nach Fragen suchen, die ich zu der Zeit gestellt habe, als ich das gefragt habe: P – Svish

5

Sie können die Anchor- und die Dock-Eigenschaft des UserControls verwenden, um Optionen festzulegen, sodass die Kanten Ihres Steuerelements an andere Teile Ihrer Benutzeroberfläche "geklebt" werden. Wenn die Benutzeroberfläche geändert wird, wird Ihre Steuerung folgen!

Wenn Sie Anker und Andocken an allen Steuerelementen in Ihrem Benutzersteuerelement verwenden und sie zum Andocken der Kanten des Steuerelements festlegen, wird die Größe der Steuerelemente mit dem UserControl geändert, und Sie können jetzt Anker/Dock auch auf das UserControl setzen.

+3

Das weiß ich, aber ich möchte nicht, dass das Steuerelement die Größe entsprechend ihrer übergeordneten Größe ändert. Ich möchte, dass es wächst oder schrumpft, so dass es gerade groß genug ist, um den Inhalt des 'FlowLayoutPanel' abzudecken, ohne dass es Bildlaufleisten oder Clipping-Inhalte enthält. – Svish

0

fand ich, dass der beste Weg, dies zu lösen, war auf dem Flowlayoutpanel einige Codes in dem ControlAdded Ereignisse zu verwenden, um die Höhe der Platte (die Höhe, weil Sie den TopDown Fluss wurden unter Verwendung) einzustellen zu sein:

e.Control.Location.Y + e.Control.Height + some margin 

und die AutoSize-Eigenschaft für das usercontrol selbst auf True setzen.

Sie müssten auch einige Andock- und Verankerungsvorschläge nach Mickel's Antwort machen.

Diese Funktionalität könnte in Ihr eigenes Steuerelement eingekapselt werden, das von FlowLayoutPanel geerbt wurde und die ControlAdded-Methode überschreibt.

2

Umhüllen der FlowLayoutPanel in einem TableLayoutPanel wird für die richtige Autosize-Verhalten ermöglichen.

Ihre UserControl sollte wie folgt aussehen:

UserControl 
    TableLayoutPanel (Dock-Fill) 
     Row1 : Label 
     Row2 : FlowLayoutPanel (Panel:Dock-Fill AND AutoSize, Row:AutoSize) 
     Row3 : Panel 

Auch wenn das UserControl verwenden, es möglich ist, müssen Sie es wickeln in einer TableLayoutPanel eine AutoSize Zeile oder Spalte.

Achten Sie auf SplitContainers, da sie oft aus dem Gleichgewicht geraten.

0

Auf eine Steuerung an die Flow Hinzufügen Sie die bereits hinzugefügt Kontrollen auf die gewünschte Größe, ohne dabei die Bildlaufleisten für Strömungs Layout panel.l