Baseline ausrichtungslinien in benutzerdefinierten Winforms-Steuerelemente
Habe ich eine benutzerdefinierte Steuerung mit einer textbox und ich würde gerne aussetzen der Grundlinie (der text in der textbox) snapline außerhalb des benutzerdefinierten Steuerelements. Ich weiß, dass Sie einen designer (geerbt von ControlDesigner) und überschreiben Sie Ausrichtungslinien, um Zugang zu den ausrichtungslinien, aber ich Frage mich, wie man den text an der Grundlinie eine Kontrolle, die ich haben ausgesetzt, die durch meine custom user control.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte gerade eine ähnliche brauche, und ich löste es so:
Diese Weise ist es tatsächlich erstellen Sie einen temporären sub-designer für die subcontrol um heraus zu finden wo die "Reale" baseline snapline ist.
Schien dies einigermaßen performant in der Testphase, aber wenn perf wird ein Anliegen (und ob das interne Textfeld nicht verschieben), dann die meisten dieser code extrahiert werden können, um das Initialize-Methode.
Dies setzt auch Voraus, dass die textbox ist ein direktes Kind des UserControl. Wenn es gibt andere Layouts, die Kontrollen in der Art, dann ist die offset-Berechnung wird etwas komplizierter.
Als ein update auf die Miral Antwort.. hier sind ein paar der "missing steps", für jemanden, der neu ist auf der Suche, wie Sie dies tun. 🙂 Den C# code oben ist fast "drop-in" bereit, mit der Ausnahme der änderung einiger Werte verweisen auf das Benutzersteuerelement, das geändert werden soll.
Möglichen Referenzen Erforderlich:
System.Design (@robyaw)
Aufzuhalten der Benutzung erforderlich:
Auf Ihrem UserControl müssen Sie das folgende Attribut:
Dann brauchen Sie ein "designer" - Klasse, haben die Ausrichtungslinien überschreiben:
Robert H.
aber es erfordert keineUserControl
Erben eine spezielle Klasse github.com/ImaginaryDevelopment/TypeProvisor/blob/master/...Dank an alle diejenigen, für die Hilfe. Dies war eine schwierige Frage zu schlucken. Der Gedanke, dass ein eigenes sub-Klasse in jedem UserControl war nicht sehr schmackhaft.
Ich kam mit dieser Basis-Klasse, um zu helfen..
Weiter, leiten Sie Ihr Benutzersteuerelement von dieser Basis aus:
Nochmals vielen Dank für dieses posting.
VB.Net Version:
Hinweis: Sie müssen ändern Sie die
txtDescription
auf die Textbox oder einem anderen internen Kontroll-Namen, den Sie verwenden. undctlUserControl
zu Ihremusercontrol
NamenDu bist auf dem richtigen Weg. Sie müssen das überschreiben der Ausrichtungslinien Eigenschaft in Ihrem designr und tun Sie etwas wie dieses:
In diesem Beispiel das Benutzersteuerelement enthält ein Textfeld. Der code fügt eine neue snapline, stellt die baseline für die textbox. Das wichtigste ist die Berechnung der offset korrekt.