Laden...

Nebeneinanderstehende Controls beim Resize nicht überlappen

Erstellt von ado683 vor 5 Jahren Letzter Beitrag vor 5 Jahren 2.242 Views
A
ado683 Themenstarter:in
27 Beiträge seit 2019
vor 5 Jahren
Nebeneinanderstehende Controls beim Resize nicht überlappen

Hallo,

wie kann ich bei winforms es hinbekommen, dass ich labels textboxen die nebeneinander sind vergrößern und verkleinern kann ohne das sie praktisch beim vergrößern ineinander verschwinden.

Im Anhang ist ein Bild, dann wisst ihr was ich meine.

D
152 Beiträge seit 2013
vor 5 Jahren
F
158 Beiträge seit 2015
vor 5 Jahren

Hey hey,

ganz genau weis ich nicht was du mit dem vergrößern / verkleinern meinst... Meinst du z.B. du vergrößerst das Fenster und der Inhalt soll sich dynamisch anpassen? Wenn das der Fall ist, kannst du dir mal das Resize-Event angucken.

Ich würde mir um die vier Elemente ein Panel setzen und dann etwas ähnliches wie folgenes draus machen:


//lab1 = "IP"
//lab2 = "Port"
//tb1 = Textfeld "IP"
//tb2 = Textfeld "Port"
private void OnResizePanel(object sender, EventArgs evt){
  Panel pan = (Panel)sender;
  lab1.Left = 10;
  lab1.Width = 30;

  tb1.Left = lab1.Left + lab1.Width;
  tb1.Width = (pan1.Width / 2) - tb1.Left; //würde dann bündig in der Mitte abschließen

  //und weiter mit den anderen beiden Elementen
  lab2.Left = tb1.Left + tb1.Width;
  //...
}

Du müsstest natürlich das Event dann an das Panel koppeln... oder du koppelst das direkt an das Fenster. Beim Fenster würde es dann automatisch gefeuert, wenn du die Fenstergröße veränderst, beim Panel müsstest du eine Starthilfe geben... z.B: "Panel.Width = 1000;"

Oder du suchst nach sowas:

//Weis aber nicht ob es das auch für Label, etc. gibt... Habs bisher nur für Fenster verwendet..
this.MinimumSize = new Size(this.Width, 200);
this.MaximumSize = new Size(this.Width, this.Height);

Gruß Frokuss

A
ado683 Themenstarter:in
27 Beiträge seit 2019
vor 5 Jahren

Das habe ich versucht.

Du siehst ja in meinem Bild, dass ich z. B. vier Elemente nebeneinander habe. IP-Label, Texbox(für die IP), Port-Label, Textbox(für den Port).
Wenn ich diese nun links und rechts verankere und dann das Fenster verkleinere dann überlappen sich die Elemente, so dass sie nicht mehr sichtbar sind.

Was tun?

1.040 Beiträge seit 2007
vor 5 Jahren

Du kannst ein Element ja an mehreren Seiten verankern, spiele damit mal rum. =)

D
152 Beiträge seit 2013
vor 5 Jahren

Ich habe länger nichts mehr mit Winforms gemacht.

Tablelayout und die Controls in die Zelle setzen und entsprechende Colspan, Dock, AutoSize setzen.

  • 4 Spalten (auto, 100%, auto, 100%)
  • 3 Zeilen (auto, auto, 100%)

------------------------------------------------------------
| IP | 127.0.0.1              | Port | 45455               |
------------------------------------------------------------
|                    Start / Stop Server                   |
------------------------------------------------------------
|                                                          |
|                                                          |
|                                                          |
------------------------------------------------------------

A
ado683 Themenstarter:in
27 Beiträge seit 2019
vor 5 Jahren

habe da schon alle möglichkeiten durchprobiert. gut wäre es wenn man die elemente aneinander irgendwie ankern kann.

4.938 Beiträge seit 2008
vor 5 Jahren

Es klappt, wenn nur genau 1 Element mit (Left, Right) verankert wird und die anderen nur mit entweder Left oder Right, so daß also nur dieses eine Element vergrößert/verkleinert wird.

Wenn du jedoch beide Textboxen vergrößern/verkleinern möchtest, dann wie "david.m" erklärt hat (wollte dies auch gerade so schreiben 😉.
Alternativ geht auch nur für die obere Zeile ein TableLayoutPanel benutzen.

Wenn du mehrere Forms mit der Kombination "Label/TextBox" hast, dann solltest du daraus ein UserControl machen (mit den entsprechenden Anchor-Einstellungen etc.), so daß du dann einfach dieses jeweils platzierst.

A
ado683 Themenstarter:in
27 Beiträge seit 2019
vor 5 Jahren

das hört sich doch mal gut an versuche das mal.
thx

A
ado683 Themenstarter:in
27 Beiträge seit 2019
vor 5 Jahren

Ich habe länger nichts mehr mit Winforms gemacht.

Tablelayout und die Controls in die Zelle setzen und entsprechende Colspan, Dock, AutoSize setzen.

  • 4 Spalten (auto, 100%, auto, 100%)
  • 3 Zeilen (auto, auto, 100%)
  
------------------------------------------------------------  
| IP | 127.0.0.1              | Port | 45455               |  
------------------------------------------------------------  
|                    Start / Stop Server                   |  
------------------------------------------------------------  
|                                                          |  
|                                                          |  
|                                                          |  
------------------------------------------------------------  
  

nachdem ich es so editiere und auf ok klicke, macht er jedes mal die spalten wieder auf 50% anstatt 100, bei den zeilen geht es komischerweise. und obwohl ich 4 spalten angebe und 3 zeilen. gibt er mir nur 2 spalten und eine zeile aus.

D
152 Beiträge seit 2013
vor 5 Jahren

spalten wieder auf 50% anstatt 100

Das ist auch Okay so, die angegebenen Prozente werden verteilt das in der Summe wieder 100% rauskommt.

gibt er mir nur 2 spalten und eine zeile aus

Im Designer sind die auto Spalten/Zeilen nicht zusehen, solange dort sich kein Control befindet.

A
ado683 Themenstarter:in
27 Beiträge seit 2019
vor 5 Jahren

Das ist auch Okay so, die angegebenen Prozente werden verteilt das in der Summe wieder 100% rauskommt.

ok dafür schon mal thx

Im Designer sind die auto Spalten/Zeilen nicht zusehen, solange dort sich kein Control befindet.

aber wenn ich ihm jetzt sage gib mir 4 spalten und drei zeilen dann haben ja zeile 2 und 3 auch vier spalten aber das will ich ja nicht.

verstehst du was ich meine?

D
152 Beiträge seit 2013
vor 5 Jahren

Die Control der 2. und 3. Zeile in der ersten Spalten platzieren und für die Controls ColumnSpan setzen.