User control Anchor-Eigenschaft Problem
Kontext :
Erstellte ich eine User Control
. Aus irgendeinem Grund, will ich mit dieser Steuerung in verschiedenen Größe. Zu halten, die erste "Vorlage" von meinem User Control
wenn die re-sizing, ich benutze die Eigenschaft Anker auf meine anderen element innerhalb der Steuerung.
Also, wenn ich meine Steuern an design-Zeit, ist es mir möglich, hand re-Größe die Kontrolle und halten Sie die original - "Vorlage" von es.
Wenn das Steuerelement erstellt wird, wird es wie folgt Aussehen :
Und nach re-Größe :
Wie Sie sehen können, ist die Eigenschaft Anker gut funktionieren.
- Die Beschriftung und das Bild in der Mitte zu bleiben.
- Das "?" bleiben auf der linken Ecke.
Das problem :
Das problem das ich habe ist, wenn das Steuerelement geladen wird, erstellt, mit einer anderen Größe als die ursprünglichen, alle die Elemente innerhalb Rückkehr in Ihre Ausgangslage :
Ich weiß nicht, ob dies der bessere Weg, das zu tun, was ich versuche zu erreichen. Beachten Sie, dass ich hinzufügen und re-Dimensionierung des Steuerelements während der design-Zeit.
Danke.
EDIT :
Ich denke, dass mein problem verursacht wird, durch die designer. Ex : ich meine-Steuerelement im designer, ich re-Größe ist es, ich habe die Lösung führen. Alles funktioniert gut. Aber wenn ich den code von der Seite, und dann zurück an den designer, das element im inneren der Steuerung wieder auf Ihre ursprüngliche position.
EDIT 2 :
Ok, ich habe eine Lösung gefunden, ich habe einfach alle bewegt das element der User control
innerhalb einer Panel
. Für einige Grund, den ich mir nicht erklären kann, es funktioniert perfekt. Die Steuern bleiben an der gleichen Stelle.
- Sie konnte die ResizeEnd Event gelten die gleichen Eigenschaften, die Sie verwendet haben, um in ResizeBegin. Wenn Sie sagen, reloaded, ist es, dass die Steuerung bekommt eine komplett neue Instanz ? Wenn dem so ist, sollte immer den Aufruf von InitializeComponent, die für die Eigenschaften im designer definiert.
- Im nicht wirklich sicher, was zu versuchen, denn mein problem scheint zu sein die Ursache für den designer. Ex : ich meine Steuern in meinem designer, ich re-Größe ist es, ich habe die Lösung führen. Alles funktioniert gut. Aber wenn ich den code von der Seite, und dann zurück an den designer, wird das element im Steuerelement zurück auf Ihre ursprüngliche position...
- Dies ist zu vage. Sie müssen erklären, wie genau diese Kontrolle hat, "re-loaded", aber nicht mehr mit seiner ursprünglichen design-Größe. Und warum die normalen PerformLayout () - Aufruf, der ist, ausgestellt nach-Steuerelemente geladen werden, wird nicht mehr gemacht.
- Verwenden Sie den debugger, um den Wert überprüfen, der Anker für die du kontrollierst, nachdem es neu geladen wird. Auch die Dock-Eigenschaft überschreibt die Anchor-Eigenschaft, so müssen Sie überprüfen, ob diese als gut.
- Ok, ich bin auf der Suche auf das jetzt, danke.
- Wie Sie sehen können habe ich eine Lösung gefunden zu meinem problem, ich danke Ihnen für Ihre Hilfe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Lösung ist ta-fügen Sie eine
Panel
zu denUser Control
und dock es zu "Füllen", dann platzieren Sie das element in der Systemsteuerung. Für einige Grund, den ich mir nicht erklären kann, die designer halten, der Lage der re-sized control Elemente.Die Verankerung, docking und auto-sizing von einem UserControl zu sein scheinen furchtbar verwirrend. Ich fand UserControl nicht automatisch die Größe mit der Form was darauf hindeutet, dass Sie die
AutoSize
EigenschaftFalse
, die ich getan habe, und es immer noch nicht richtig mein problem. Aber wenn ich habe versucht, Ihre Lösung, habe ich auch bemerkt, es gibt zwei Kopien derAutoSize
Eigentum! Ich hatte dieAutoSize
in der UserControl-designerFalse
, aber die Form designer, wo Sie die UserControl-Instanz Hinzugefügt wurde, hatte auch eineAutoSize
auf die Instanz, und dass man hatte einen verschiedenen Wert (es war nochTrue
). Wenn ich aufFalse
auch, dann hat alles geklappt (mit dem panel in place). Dann ich entfernte die Platte, die Sie vorgeschlagen haben, und alles, was noch funktionierte. Also ich denke, der trick ist, um sicherzustellen, dass Sie alle Eigenschaften des UserControl im UserControl-designer und in der form designer, wo die Steuerung verwendet wird. Dann müssen Sie sich nicht ein panel.Ich habe ähnliches problem in VS2015 Projekt, und leider - keine der Antworten geholfen. Saubere und funktionierende Lösung gefunden wurde hier, in Jignesh Thakker Antwort.
Für eine schnellere navigation hier ist es wie es gemacht wurde, in meinem Projekt (c++/cli, nicht c#, aber die Idee ist die gleiche):
Legen Sie die Localizable-Eigenschaft der übergeordneten form bei der VS-designer auf false. Dies löst das problem zur design-Zeit. (Speichern, schließen und öffnen Sie das Formular nach dem einschalten der Eigenschaft)
Wenn Sie eine lokalisierte Anwendung schalten Sie die Localizable-Eigenschaft auf true nach dem Ende der arbeiten am layout und kümmern sich nicht um die WLAN-Vertretung in der VS-designer. Zur Laufzeit ist es richtig dargestellt.
Getestet in VS2013