Nutzer bei Usercontrol aus mehreren (evtl. String) Optionen wählen lassen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von asusdk.

    Nutzer bei Usercontrol aus mehreren (evtl. String) Optionen wählen lassen

    Hi @ All, sorry das ich schon wieder nerve ^^

    Ich arbeite ja gerade (zum üben) an einer Costum - Progressbar, und scheitere daran das ich vermutlich nicht die richtigen Suchbegriffe nutze, es geht darum wie kann ich den User zwischen z.B. 3 Optionen wählen lassen?

    Also im Sinne das er z.B. wählen kann zwischen Links-Mitte-Rechts (wie z.B. textAlign bei einem Label) also das er ein Dropdown bekommt da einen eintrag auswählt und ich diesen Wert erhalten kann,
    ich habe schon nach UserControl with MultipleChoice gesucht, nach vb.NET User-Control mit Auswahl aber ich finde nicht einen Eintrag in die Richtung, daher vermute ich das ich erstmal wissen muss wie man so etwas nennt bevor ich überhaupt entsprechend googlen kann...

    Weiss hier jemand Rat ?

    Danke und Greets
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Ich versteh's grad nicht ganz. Deine Costume Custom-Progressbar soll ein User-Control werden? Wenn ja, dann arbeitest Du wohl nicht mit der Vorlage "User Control", richtig? Ansonsten musst Du eben, wenn Du es als eigenständige DLL machen willst, passende Properties mitgeben, die Du über den Code dann ansteuerst. Oder willst Du ne sichtbare Auswahl haben? Die würde dann aber m.E. dauerhaft in die Sichtanzeige mit einlaufen - es sein denn, man schaltet sie nach der Auswahl auf unsichtbar. Fragen über Fragen ...
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    @ErfinderDesRades
    VB.NET-Quellcode Public Enum MyOptionEnm : Ja : Nein : Vielleicht : End Enum

    Public Property MyOption As MyOptionEnm = MyOptionEnm.Vielleicht


    Probier ich gleich mal aus =)

    evtl. hab ichs nicht genug erläutert also.

    Wenn ich z.B. Will das der Nutzer eine Farbe Wählen Kann, dann leg ich die Property Color fest, jetzt kann der User ja im Designer einfach (per nun verfügbaren) ColorPicker die Farbe ändern - So weit so klar

    Wie kann ich es nun aber anstellen das wenn ich z.b. einen String ja Selber zeichne, der User auswählen Kann ob der String in der Mitte der Form auftaucht oder ganz Links(rechts) eben wie die Funktion TextAlign bei einem Label. Da bräuchte ich also entweder etwas wie ein 3-Zustands Boolean oder eine Liste mit vorgegebenen Optionen, zwischen welchen der User im Designer einfach einen per Dropdown auswählt (eben wie z.B. TextAlign bei einem Label). Also brauche ich einen 3-Zustand Bool oder :

    Liste mit den gewünschten Zuständen (z.B. ne Enum mit 3 Strings, möglichst mit einem StandardWert)
    Eine Möglichkeit die Gesamte Liste an den User zu übergeben so das er daraus wählen kann, und dann den gewählten Wert z.B. als String oder Integer auszuwerten.

    @ErfinderDesRades leider hagelt es mir egal wie ich es versuche nur Fehler, wenn ich mit
    Public Property MyOption As MyOptionEnm = MyOptionEnm.Vielleicht ja gleich einen EnumEintrag Augewählt habe
    lässt er mir kein GetSet mehr zu

    Direkt:

    VB.NET-Quellcode

    1. Public Enum LabelAlignEnum : Left : Center : Right : End Enum
    2. Public Property LabelAlign As LabelAlignEnum = LabelAlignEnum.Center

    funktioniert aber eben ohne GetSet und dergleichen, wenn ich es so versuche

    VB.NET-Quellcode

    1. Public Property LabelAlign As LabelAlignEnum = LabelAlignEnum.Center
    2. Get
    3. End Get
    4. Set(value As LabelAlignEnum)
    5. End Set
    6. End Property

    Meckert er rum das : Erweiterte Eigenschaften können nicht initialisiert werden


    Ha mit :

    VB.NET-Quellcode

    1. Public Enum LabelAlignEnum : Left : Center : Right : End Enum
    2. Private LabelAlignVal As LabelAlignEnum
    3. Public Property LabelAlign() As LabelAlignEnum
    4. Get
    5. Return LabelAlignVal
    6. End Get
    7. Set(value As LabelAlignEnum)
    8. LabelAlignVal = value
    9. End Set
    10. End Property


    Funktioniert es, anscheinend musste die Public Property als Array Deklariert werden, Danke an Alle Helfer !


    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „asusdk“ ()

    Für diese Art Einstelmöglichkeit gibts bereits ein Enum - es heisst StringAlignment. Und das geniale daran ist, man kann es sowohl für horizontal als auch für vertikal benutzen - in etwa so:

    VB.NET-Quellcode

    1. Private _LabelAlign As StringAlignment = StringAlignment.Center
    2. Public Property HorizontalAlign() As StringAlignment
    3. Get
    4. Return _LabelAlign
    5. End Get
    6. Set(value As StringAlignment)
    7. If _LabelAlign = value Then Return
    8. _LabelAlign = value
    9. End Set
    10. End Property
    Beachte auch meine Namenskonvention für das BackingField der Property, und dass des Setters erstes Amt ist, mehrfach-Zuweisungen auszufiltern.

    Einiges mehr zu Control-entwicklung - grad auch StringAlignment - kannste hier abgugge: activevb.de/cgi-bin/tippupload…mit_der_Stringformat_Klas

    ErfinderDesRades schrieb:

    VB.NET-Quellcode

    1. If _LabelAlign = value Then Return

    @asusdk Dieses If ist hier nicht erforderlich, da beim Setzen des Property-Wertes keine Aktion auslöst wird.
    Erst wenn nach dem Setzen des Wertes eine (umfangreichere) Prozedur aufgerufen wird, macht ein solches If Sinn.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    VB.NET-Quellcode

    1. Private _LabelAlign As StringAlignment = StringAlignment.Center
    2. Public Property HorizontalAlign() As StringAlignment
    3. Get
    4. Return _LabelAlign
    5. End Get
    6. Set(value As StringAlignment)
    7. If _LabelAlign = value Then Return
    8. _LabelAlign = value
    9. End Set
    10. End Property



    @ErfinderDesRades danke dir, hab ich gleich mal ausprobiert, und es funktioniert auch fast einwandfrei, aber der User bekommt hier zur auswahl : Near,Far,Center , also müsste ich hierfür erstmal Far zu Right umwandeln und Near zu left(nicht intern sondern für den User sichtbar), da bleibe ich aktuell lieber bei deinem ersten Vorschlag mit der Enum =) (also was das StringAlign angeht) bei einigen andren Fällen hab ich es in der Form eingesetzt, spart vor allem das auswerten und manuell setzen,hehe

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private BarSmoothingModeVal As SmoothingMode
    2. Private BarInterpolationModeVal As InterpolationMode
    3. Private BarCompositingQualityVal As CompositingQuality
    4. Private BarPixelOffsetModeVal As PixelOffsetMode
    5. '''''Propertys............
    6. Public Property SmoothingMode() As SmoothingMode
    7. Get
    8. Return BarSmoothingModeVal
    9. End Get
    10. Set(value As SmoothingMode)
    11. BarSmoothingModeVal = value
    12. Me.Invalidate()
    13. End Set
    14. End Property
    15. Public Property InterpolationMode As InterpolationMode
    16. Get
    17. Return BarInterpolationModeVal
    18. End Get
    19. Set(value As InterpolationMode)
    20. BarInterpolationModeVal = value
    21. Me.Invalidate()
    22. End Set
    23. End Property
    24. Public Property CompositingQuality As CompositingQuality
    25. Get
    26. Return BarCompositingQualityVal
    27. End Get
    28. Set(value As CompositingQuality)
    29. BarCompositingQualityVal = value
    30. Me.Invalidate()
    31. End Set
    32. End Property
    33. Public Property PixelOffsetMode As PixelOffsetMode
    34. Get
    35. Return BarPixelOffsetModeVal
    36. End Get
    37. Set(value As PixelOffsetMode)
    38. BarPixelOffsetModeVal = value
    39. Me.Invalidate()
    40. End Set
    41. End Property
    42. '''''''' Drawing...............
    43. With e.Graphics
    44. .TextRenderingHint = LabelTextRenderingVal
    45. .SmoothingMode = BarSmoothingModeVal
    46. .InterpolationMode = BarInterpolationModeVal
    47. .CompositingQuality = BarCompositingQualityVal
    48. .PixelOffsetMode = BarPixelOffsetModeVal
    49. End With

    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If