auf dem Weg zu meinem ersten UserControl

  • VB.NET

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

    auf dem Weg zu meinem ersten UserControl

    Moin!

    nachdem man mir in einem anderen Posting zu einem UserControl geraten hat versuche ich mich jetzt einmal daran.

    Eine der ersten Fragen ist, wie platziere ich die Controls am besten, damit später eine vertikale Ausrichtung am einfachsten ist. Einfach platzieren führt zu diesem Ergebnis:



    Die beiden Labels sind nicht genau übereinander auszurichten. Mein neues ist das ganz unten.

    Auch die darüberliegenden Combo-Controls würde ich gerne an dem Combo in dem UserControl irgendwie ausrichten.

    Gibt es einen Trick in der Vorgehensweise?

    Gruß Jan
    Bedenke, dass das UC eine Box mit Außenrahmen ist. Der Designer will Dir allerdings dabei helfen, dass es schön aussieht und schnappt am Rand die inneren Controls mit etwas Abstand zum Rand an. Bei der Platzierung des UCs wird aber nur der Außenrand beachtet. Am besten zu sehen, wenn man den beteiligten Controls einen Rahmen gibt, siehe Anhang.
    Einfach die inneren UC-Controls entweder direkt an den Rand setzen oder manuell durch Setzen der Location-Koordinaten an den Rand quetschen (X-Koordinate muss dann also 0 sein).
    Bilder
    • UcAufForm.png

      5,85 kB, 343×168, 27 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Moin!

    ich habe da aber noch eine Frage ...

    In dem UC ist ein Label enthalten. Im Designer wird das mit Label angezeigt.

    Im Code habe ich das als Property hinterlegt

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Text für das Label
    3. ''' </summary>
    4. Public WriteOnly Property Label As String
    5. Set(value As String)
    6. Label1.Text = value
    7. End Set
    8. End Property


    Das wird dann auch sicherlich zur Laufzeit angezeigt, aber ich würde gerne wie bei den "normalen" Controls zu Laufzeit schon den Text über die UC-Eigenschaften einstellen. Vergleichbar der Eigenschaft TEXT bei einem Label oder Button.

    Ansonsten habe ich x Controls untereinander die alle gleich aussehen und das ist auch nicht gerade hilfreich.



    Geht das auch und wenn wie?

    Gruß Jan
    Verwende keine WriteOnly-Property, sondern eine normale:

    VB.NET-Quellcode

    1. Property Label As String
    2. Get
    3. Return Label1.Text
    4. End Get
    5. Set
    6. Label1.Text = Value
    7. End Set
    8. End Property

    Dann wird es nach dem Kompilieren auch im Designer bei den UC-Propertys angezeigt und Du kannst den Wert ändern und das Ergebnis im Designer sehen (dafür wird der Getter gebraucht).
    Bilder
    • ModifiedUC.png

      16,05 kB, 603×296, 24 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    So, bis jetzt in ich gut vorangekommen und auch mehr als Zufrieden.

    Nun aber habe ich ein ganz merkwürdiges Phänomen.

    Die Definition des UC sieht optisch wie folgt aus:



    Dann habe ich einmal kompiliert und auch alles gestartet und plötzlich sind die Comboboxen im UC disenabled!!!!

    Dann habe ich das Programm angehalten und plötzlich sehen die UC in der Maske auch ausgegraut aus.



    Vorsichtshalber habe ich einmal neu kompiliert - immer noch ausgegraut.

    Auch wenn ich ein UC aus der Toolbox neu in den Dialog ziehe ist der auch sofort ausgegraut.

    Wenn ich das UC in der graphischen Entwicklung ansehen deutet nichts auf gesperrt und disenabled hin. Zumal das Label "normal" ist.

    Für das Combo im UC sind folgende Eigenschaften aktive - stimmen mich auch nicht nachdenklich.



    Kann mir einer weiterhelfen?

    Jan
    habe den Fehler gefunden! es war in Code des UC!!

    Da ist aber wohl noch ein anderer Design-Fehler von mir.

    Ich suche gerade.

    Gefunden: habe das Combo zu einem falschen Zeitpunkt befüllt und im Code gab es die Situation, dass ohne Daten disenabled wird.

    Was mich nur start verwundert hat, war das die disenabled-Darstellung auch im Entwurf-Stadium zu sehen war.

    gruß Jan

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „jan99“ ()

    So jetzt komme ich zu einer weiteren Frage.

    Das UC besteht, wie schon gezeigt, aus einem Label und einer Combobox.

    Wie komme ich jetzt aber an die Events von der Combobox - zum Beispiel um auf Werteänderungen reagieren zu können und die Werte der Combobox auslesen und setzen zu können??!?!



    SelectedIndexChanged zum Beispiel finde ich da nicht!

    Gruß Jan
    @jan99 Du musst die Events durchreichen.
    Wenn im UC ein Event aufgerufen wird, musst Du das an das Parent durchreichen,
    dazu musst Du im UC ein entsprechendes Event deklarieren, im Parent abonieren (das geht dsann im Designer)
    und im UC mit RaiseEvent weiterleiten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    In manchen Fällen ist das nicht nötig.
    Ein UserControl kann die Events auch selbst behandeln. Das hilft aber nur wenn das UserControl eigenständig agieren kann oder man verliert Übersichtlichkeit.

    Aber allgemein sind Events ein wichtiger Bestandteil von Controls. Da ist es doch ganz normal, dass ein eigens gebautes Control auch eigens gebaute Events hat.

    jan99 schrieb:

    Mein Ziel ist es alles darum zu bündeln was ich sonst in einzelcontrols habe.
    Poste eine vollständige und belastbare Aufgabenstellung.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!