Entwickler-Ecke

WinForms - Size-Parameter wird falsch angezeigt


Delete - Sa 03.09.16 22:33
Titel: Size-Parameter wird falsch angezeigt
Hallo Community,
ich habe ein UserControl und eine WinForm. Erst inszanziiere ich das UC, dann die WinForm. Nun gebe ich der WinForm eine neue Size, nämlich die des UserControls. Anschließend adde ich das UC, aber es gibt Probleme mit der Größendarstellung. Anscheindend ist die Form zu klein.


C#-Quelltext
1:
2:
3:
4:
5:
Link link = new Link();
LanguageControlViewer viewer = new LanguageControlViewer();
viewer.Controls.Add(link);
viewer.Size = new Size(link.Width, link.Height);
viewer.Show();


Palladin007 - Sa 03.09.16 22:37

Zitat:
Anscheindend ist die Form zu klein.


Ändere das doch?


Ralf Jansen - Sa 03.09.16 22:53

Die Form ist so groß wie du sie gesetzt hast. Aber eben halt mit Rahmen, Header, Statusbar u.s.w. was ein Form halt so hat. Wenn du eine bestimmte ClientSize brauchst solltest du auch die ClientSize setzen und nicht Size. Wenn du die Form richtig sizen möchtest wäre es auch üblicher AutoSize zu benutzen und den passenden AutoSizeMode [https://msdn.microsoft.com/de-de/library/system.windows.forms.form.autosizemode(v=vs.110).aspx] zu setzen.

Das funktioniert aber nur richtig (und nicht nur zufällig richtig) wenn man das UserControl auch richtig positioniert, sized, docked und/oder anchored. Nichts davon sehe ich in deinem Code.


Delete - Sa 03.09.16 22:57

Ah okay. Vielen Dank, nun funktioniert es :)

PS: Ich habe die UserControls in einer DLL. Ich möchte nun nur noch eine WinForm brauchen die dann alle UC's automatisch darstellt, also auf der WinForm sich keine weiteren Steuerelemente enthalten. Aber mit der ClientSize funktioniert es. Danke dafür!


Palladin007 - Sa 03.09.16 23:08

Du solltest allgemein darauf achten, dass sowohl Controls als auch Forms responsive aufgebaut sind.
Dann musst Du eine feste Größe nur noch bei der Form setzen - oder wenn Du explizit eine feste Größe brauchst.

Mit den Eigenschaften Dock und Anchor sollte sich das gut machen lassen.
So kannst Du mit ein paar Panels und geschicktem Setzen der Dock-Eigenschaft hervorragend eine Oberfläche iin responsive Bereiche aufteilen.
Als Alternative gibt's aber auch Controls wie SplitContainer oder das TableLayoutPanel.