Laden...

Controls automatisch anordnen lassen

Erstellt von oehrle vor 14 Jahren Letzter Beitrag vor 14 Jahren 3.254 Views
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 14 Jahren
Controls automatisch anordnen lassen

Hallo, folgendes Problem. Ich habe mehrere Textboxen mit Labels in die Daten eingegeben werden können. Je nach Auswahlkriterium sind aber nur manche von denen sichtbar. Nun möchte ich aber diese Controls immer direkt untereinander stehen haben, auch wenn manche ausgeblendet sind, damit kein leerer Bereich vorhanden ist. Wie mache ich das am besten? Ich denke die Controls in ein Panel packen, das wäre schon mal der erste Schritt. Wie organisiere ich dann das automatische anpassen im Panel?

109 Beiträge seit 2009
vor 14 Jahren

Ich nehme an du realisiserst das Sichtbar / Unsichtbar über .visible, oder?

Lass doch eine Schleife durchlaufen, die überprüft, ob ein Control.Visiblefalse ist. wenn ja, werden die Position zwischengespeichert und dem nächsten visibletrue Control als position übergeben.

und so stellt sich wieder einmal die Frage: Warum klappt das nicht gleich so gut?

5.299 Beiträge seit 2008
vor 14 Jahren

Du kannst ein FlowLayoutPanel nehmen, und FlowDirection.TopDown einstellen.
Deine Textboxen müssen jeweils zusammen mit dem entsprechendem Label auf ein kleines Panel, sodaß sie von außen wie ein Control gelten.
Und diese kleinen Panels schmeisste ins FlowLayoutPanel - das ordnet die autom. schön an.
Dann kannste son panel hiden und showen, und kein Problem


   Private Sub CheckBox1_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) _
         Handles CheckBox1.CheckedChanged
      CaptionPanel1.Visible = CheckBox1.Checked
   End Sub

ups - vb - aber so in der Art 😉

Der frühe Apfel fängt den Wurm.

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 14 Jahren
Label neu anordnen nicht möglich, warum?

Hallo , versuche gerade die Labels aus einem Panel über eine foreach-Schleife neu anzuordnen. Geht aber nicht, da ich dem control (ctrl.Locatin.X = Wert) keinen WErt zuweisen kann. Hat jemand eine Idee warum?

Hier noch der Quellcode:


for (int i = 0; i < panel_Eingabedaten.Controls.Count; i++ )

				foreach (Control ctrl in panel_Eingabedaten.Controls)
				{
				   if((ctrl is Label) && (ctrl.Visible))
				   {
				   	 if(ctrl.Tag.ToString() == i.ToString())
				   	 {
				   	 	//Label label = (Label) lbl;
				   	 	ctrl.Location.X = 10;				// Geht nicht (Cannot modify the expression because its not a variable  ==> so lautet die Meldung vom Compiler)
				   	 	ctrl.Location.Y = 20;
				   	 }


				   }
				}
109 Beiträge seit 2009
vor 14 Jahren

versuch mal

ctrl.Location= new Point(10,20);

und so stellt sich wieder einmal die Frage: Warum klappt das nicht gleich so gut?

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 14 Jahren
Danke, funzt

Hat funktioniert, danke.