UserControl im Designer anhand des Textes positionieren

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Hermann.

    UserControl im Designer anhand des Textes positionieren

    Hi,
    beim Label gibts das, beim Button auch: Es gibt Hilfslinien, die ein Ausrichten anhand der Textposition im Control ermöglicht.
    Jetzt aber die Frage: Wie schaffe ich es, dass mein Control auch anhand dessen Text ausgerichtet werden kann?
    Falls unverständlich: siehe Bild
    Hoffe ihr versteht, was ich meine!
    MfG,
    Hermann
    Bilder
    • AusrichtenANhandDesTextes.png

      4,67 kB, 310×139, 169 mal angesehen
    Hi Leute,
    danke für eure Mühen, aber beio mir gibt es nirgends etwas mit SnapLine oder Designer :(
    MyBase hat diese Property anscheinend nicht, obwohl das genau so in den Codes verwendet wird.
    Hab mal auf MSDN geguckt, dort gibts was zu SnapLine, aber bei Inherits gibts die Klasse auch nicht, die dort angegeben wird :(
    Ich verwende übrigens VB-Studio 2010 Express

    VB.NET-Quellcode

    1. Public Overrides ReadOnly Property SnapLines() As System.Collections.IList
    2. Get
    3. Dim snapLinesList As ArrayList = TryCast(MyBase.SnapLines, ArrayList)
    4. Dim offset As Integer
    5. Dim ctrl As MyControl = TryCast(Me.Control, MyControl)
    6. If ctrl IsNot Nothing AndAlso ctrl.TextBox1 IsNot Nothing Then
    7. offset = ctrl.TextBox1.Bottom - 5
    8. End If
    9. snapLinesList.Add(New SnapLine(SnapLineType.Baseline, offset, SnapLinePriority.Medium))
    10. Return snapLinesList
    11. End Get
    12. End Property

    System.Design nicht da :(

    Hallo,

    sorry, dass ich euch hier so auf die Folter spanne, aber ich kann System.Design nicht finden (siehe Anhang) und auch bei MSDN hab ich nirgends was von SnapLines gehört
    Bilder
    • DesignNichtDa.png

      29,17 kB, 566×454, 133 mal angesehen
    Nein, bei mir gibts das irgendwie nicht, im Anhang ist nochmal ein Screenshot aus'm Objektbrowser, wo das zeug ja Alphabetisch geordnet ist.
    Vielleicht liegt's ja an der Visual-Studio Version, ich habe 2010 Express, und du?
    Hab schonmal in dein Profil geguckt, du verwendest die 2008er Version, oder?
    Und welche genau (Express, Professional, ...)?
    Werde das ganze demnächst mal unter der 2008er ausprobieren, denn ich dachte auch, das es das gibt :(
    Bilder
    • DesignImmerNochNichtDa.png

      7,18 kB, 311×234, 113 mal angesehen
    Vielen Dank, letztlich hat es geholfen das Framework umzustellen.
    Alles ist jetzt soweit fertig, nur: Da das Ganze ja von ControlDesigner und nicht von Control erbt, wie füge ich das Control (bzw. mein von ControlDesigner abgeleitets Ding) zur Form hinzugefügt?
    Hab es schon mit DasControl.Control versucht, aber das scheint nicht zu gehen :(
    Hoffe, ihr könnt mir noch das letzte Mal helfen :)
    Hast du dir das Codebeispiel auf MSDN angesehen? (Link in Post #8)

    Du hast ja einmal dein Control "ExampleControl" und die per Attribut hinzugefügte "Beschreibung" wie sich das Control im Designer zu zeichnen hat - nennt sich da "ExampleControlDesigner".
    ExampleControl leitet sich von Contol ab, das ist wichtig, sonst funktioniert es nicht. Dein Programmcode sollte etwa so aussehen:



    Wichtig ist, dass nicht aller Code in der Form1-Klasse ist. Wenn du das Projekt nun einmal debuggen lässt, dann wirst du dein "ExampleControl" in der Toolbox finden können.
    Jaaaaaa,
    ich habe es geschafft *heult vor Freude*
    Falls es euch interessiert, hier ist der Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Windows.Forms.Design
    2. Imports System.Design
    3. Imports System.Windows.Forms.Design.Behavior
    4. Imports System.ComponentModel
    5. Imports System.ComponentModel.Design
    6. Public Class SnapLinesTestDesigner
    7. Inherits ControlDesigner
    8. Public Overrides ReadOnly Property SnapLines() As System.Collections.IList
    9. Get
    10. Dim snapLinesList As ArrayList = TryCast(MyBase.SnapLines, ArrayList)
    11. Dim offset As Integer
    12. offset = 5 'Das ist nur ein Beispiel, später wird hier dann der richtige Wert berechnet...
    13. snapLinesList.Add(New SnapLine(SnapLineType.Baseline, offset, SnapLinePriority.Always)) 'Auch hier kann/ muss noch etwas angepasst werden:
    14. 'SnapLine.Baseline gibt an, dass es sich um die Grundlinie handelt, wie bei Text... (aber NICHT irgendwelche Kanten des Controls!)
    15. 'offset ist eben der offset, gerechnet wird von der linken, oberen Ecke des Parent-Controls
    16. 'SnapLinePrority sollte auch angepasst werden, wahrscheinlich in diesem Fall auf .Medium, Allways war nur zu Testzwecken gewählt, aber das ist ja nicht sooo wichtig
    17. Return snapLinesList
    18. End Get
    19. End Property
    20. End Class


    In die Zeile vor dem Code des User-Controls schreibt ihr dann folgendes:

    VB.NET-Quellcode

    1. <Designer(GetType(EuerControlDesigner))> _

    EuerControlDesigner wird dabei selbstverständlich durch den Namen eures Designers ersetzt.
    Bei der Benennung gibt es übrigens eine Konvention:
    Der Name des Controls, für das der Designer ist, plus Designer, also:
    Das Controls heißt ExtendedTabPanel,
    der Designer dafür heißt demnach: ExtendedTabPanelDesigner.

    Und letztlich nochmal alle Fehlerquellen/ Dinge, die ihr beachten müsst:
    Spoiler anzeigen
    1. Hinter dem Framewok-Namen darf nicht "Client Profile" stehen (siehe Post von FrakJNS weiter oben)
    2. System.Design muss als Verweis importiert sein.
    3. Ihr benötigt folgende Imports:

    Quellcode

    1. System.Windows.Forms.Design
    2. System.Windows.Forms.Design.Behavior
    3. System.ComponentModel

    entweder per "importierte Namespaces" oder in der Datei per "Import"-Anweisung
    bei der Designer-Klasse
    4. In der Control-Klasse wird der folgende Import benötigt:

    Quellcode

    1. System.ComponentModel

    auch diesen entweder bei importierten Namespaces oder in der Datei selbst


    Ich hoffe, ich konnte euch damit noch helfen und möchte mich meinerseits ganz ganz herzlich bei euch bedanken!
    MfG, Hermann

    //Edit & PS: Meint ihr, ich sollte das ganze nochmal bei tutorials reinschreiben? (Hat ja jetzt im letzten Post schon etwas Tut-Form)