Absolute Positionierung von .NET Controls im Visual Studio Entwurfsfenster
-
Ich habe ein Windows Form Fenster, welches ein Tab Control und ein Status Strip enthält. Der Status Strip ist wie üblich am unteren Rand des Fenster, während das Tab Control den Rest des Fenster minus einem Rand einnehmen soll. Und bei der genauen Positionierung des Tab Controls habe ich Probleme.
Problem Nr. 1: Wenn ich das Form Fenster von Hand im VS Entwurfsfenster in der Größe verändere, so verschiebt Visual Studio automatisch auch das Tab Control. Einen Anchor nutze ich nicht.
Problem Nr. 2: Stelle ich FormBorderStyle des Forms auf z.B. FixedSingle, so erscheint das Tab Control im Entwurfsfenster nicht mittig. Starte ich jedoch das Programm, so erscheint das Tab Control mittig.
Ich habe den Rand zwischen Tab Control und Fenster bzw. Status Strip in Gimp nachgemessen. Die Unterschiede im Entwurfsfenster und gestartetem Programm sind:
(Links: 10px, Oben: 12px, Rechts: 30px, Unten: 51 px) (Entwurfsfenster)
(Links: 10px, Oben: 11px, Rechts: 12px, Unten: 13 px) (Programm)Stelle ich FormBorderStyle auf Sizeable, so sehe ich keinen Unterschied. Ich möchte aber kein Sizeable Fenster.
Was mache ich hier falsch? Gibt es eine Möglichkeit Control Element absolut zu positionieren ohne Einflussnahme von anderen Forms bzw. Controls?
-
Welchen Wert hast du bei AutoScaleMode stehen?
Wenn die enthaltenen Elemente bei Größenänderung der Form nicht skaliert werden sollen, dann benutzeNone
.@Quiche-Lorraine sagte in Absolute Positionierung von .NET Controls im Visual Studio Entwurfsfenster:
Einen Anchor nutze ich nicht.
Der Standard ist aber
Top | Left
. Oder hast du explizit dortNone
eingestellt? Dann siehe die "Hinweise" in AnchorStyles.Wenn du das
TabControl
mittig darstellen willst, warum nicht einfach denAnchor
aufTop | Left | Bottom | Right
(also an alle Ecken andocken) stellen?Oder
Dock.Fill
verwenden undMargin
bzw.Padding
für dieForm
bzw. dasControl
passend setzen.
-
@Quiche-Lorraine sagte in Absolute Positionierung von .NET Controls im Visual Studio Entwurfsfenster:
Gibt es eine Möglichkeit Control Element absolut zu positionieren ohne Einflussnahme von anderen Forms bzw. Controls?
Soweit ich weiss nicht wenn das Control ein Child-Control eines anderen Controls ist.
Ein Child der Form ist es natürlich sowieso immer, d.h. es ist auch immer relativ zur Client-Area der Form.Was @Th69 zum Anchor-Mode und
Dock.Fill
geschrieben hat sollte gut funktionieren.Problem Nr. 1: Wenn ich das Form Fenster von Hand im VS Entwurfsfenster in der Größe verändere, so verschiebt Visual Studio automatisch auch das Tab Control. Einen Anchor nutze ich nicht.
Würde mich jetzt stark wunder. Also wenn Anchor und Dock beide "none" sind, dann sollte sich an der Position/Grösse nix ändern wenn du die Grösse der Form änderst.
Problem Nr. 2: Stelle ich FormBorderStyle des Forms auf z.B. FixedSingle, so erscheint das Tab Control im Entwurfsfenster nicht mittig. Starte ich jedoch das Programm, so erscheint das Tab Control mittig.
Hm. Auch komisch. Halte ich aber eher noch für möglich, der Forms Designer hat schon ein paar Eigenheiten. Aber: bist du dir sicher dass im Designer die ganze Form zu sehen ist? Oder könnte es sein dass die irgendwo abgeschnitten ist weil sie nicht ganz ins Designer-Fenster passt?
-
@Th69 sagte in Absolute Positionierung von .NET Controls im Visual Studio Entwurfsfenster:
Der Standard ist aber Top | Left. Oder hast du explizit dort None eingestellt? Dann siehe die "Hinweise" in AnchorStyles.
Danke schön, ich konnte das Problem lösen.
Stelle ich die AnchorStyles auf Top | Left, so löst sich das erste Problem auf. Ferner stand bei mir AutoScaleMode auf Font. Stelle ich diesen auf None so verschwindet das zweite Problem.
Ich konnte nun das Fenster wie gewünscht aufbauen.
-
@hustbaer sagte in Absolute Positionierung von .NET Controls im Visual Studio Entwurfsfenster:
Würde mich jetzt stark wunder. Also wenn Anchor und Dock beide "none" sind, dann sollte sich an der Position/Grösse nix ändern wenn du die Grösse der Form änderst.
Man sieht das Verhalten nur dann so richtig, wenn man mit der Größe des Forms von klein nach groß herumspielt.
Ein Beispiel. Ich füge in einer größeren Form (1024*768) einen Button an die linke obere Ecke mit einem Abstand von ein paar Pixeln. Stelle ich nun den Anchor des Buttons auf None und spiele mit der Breite des Forms herum, so wandert der Button. Mache ich das Form kleiner, so wandert der Button ins negative.
Ich habe mal den Abstand zwischen Button und Form-Border bei unterschiedlichen Form-Größen gemessen:
Links: 12, Rechts: 536
Links: 311, Rechts: 825Ein weiterer Test: Ich mache das Form klein und passe den linken und rechten Rand des Buttons so an dass dieser an dem linken und rechten Rand des Forms snappt. Verändere ich nun die Breite der Form, so bleibt der Button mittig.
Aber: bist du dir sicher dass im Designer die ganze Form zu sehen ist? Oder könnte es sein dass die irgendwo abgeschnitten ist weil sie nicht ganz ins Designer-Fenster passt?
Ja, die ganze Form ist im Designer zu sehen.
Ich konnte das Problem auch nachvollziehen. Ich nehme eine Form der Größe 460*250. Nun füge ich einen Button hinzu, so dass dieser fast die komplette Client-Area bedeckt und Pi mal Daumen einen Abstand von ein paar Pixeln zu dem Rand hat. Starte ich nun das Programm, so funktioniert alles.
Und nun setze ich die Form-Eigenschaften AutoScaleMode auf Font und ControlBox auf False. Starte ich nun das Programm, so ist mein zweites Problem sichtbar, der Button ist abgeschnitten.
Stelle ich nun AutoScaleMode auf None so wird der Button wieder wie gewünscht angezeigt.
-
@hustbaer sagte in Absolute Positionierung von .NET Controls im Visual Studio Entwurfsfenster:
Aber: bist du dir sicher dass im Designer die ganze Form zu sehen ist? Oder könnte es sein dass die irgendwo abgeschnitten ist weil sie nicht ganz ins Designer-Fenster passt?
Da sieht man mal wieder eine schöne Eigenschaft des Forums.
Man bekommt eine Frage gestellt, forscht deswegen an dem Problem herum, versteht dadurch das Problem selbst und erklärt dies dem Fragesteller.
-
@Quiche-Lorraine
Hm. Sieht so aus als hätte ich das Verhalten bei "Anchors = none" falsch in Erinnerung gehabt.Und nun setze ich die Form-Eigenschaften AutoScaleMode auf Font und ControlBox auf False. Starte ich nun das Programm, so ist mein zweites Problem sichtbar, der Button ist abgeschnitten.
Hm. Das sollte mMn. trotzdem nicht passieren. Setzt du vielleicht die Grösse der Form manuell im Programm?
-
@hustbaer sagte in Absolute Positionierung von .NET Controls im Visual Studio Entwurfsfenster:
Setzt du vielleicht die Grösse der Form manuell im Programm?
Nein. Ich habe es zusätzlich in einem Testprojekt ausprobiert und komme zu dem gleichen Ergebnis.
-
OK. Das scheint dann wohl eine Eigenart/ein Fehler von WinForms zu sein.