Objekteigenschaten für alle Objekte des gleichen Datentyps ändern

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von sinsibo.

    Objekteigenschaten für alle Objekte des gleichen Datentyps ändern

    Hi,


    ich verwende mehrfach das Objekt "DateTimePicker" in meiner Prozedur Form_Load und möchte für alle die gleiche Eigenschaften haben, wie z.B. nur die Uhrzeit anzeigen in Stunden und Minuten ohne den Sekunden. Ich habe versucht über For Each die Objekteeigenschaften für alle einzustellen und bin kläglich gescheitert. Laut

    HTML-Quellcode

    1. http://msdn.microsoft.com/de-de/library/system.windows.forms.datetimepicker.customformat(v=vs.80).aspx
    müsste dies Möglich sein.
    Daher die Frage, ob es eine Möglichkeit gibt, dies über eine Schleife zu tun.

    Quellcode

    1. PrivateSub Form1_Load(sender AsObject, e AsEventArgs) HandlesMyBase.Load
    2. Dim datetimeObject As System.Object
    3. ForEach datetimeObject AsDateTimePicker <--- Bereits hier schon ein Compilerfehler
    4. datetimeObject.Format = DateTimePickerFormat.Custom
    5. datetimeObject.CustomFormat = "HH:MM"
    6. Next datetimeObject
    7.  
    8. TimeCom0.Format = DateTimePickerFormat.Time
    9. TimeCom1.Format = DateTimePickerFormat.Time
    10. TimeCom2.Format = DateTimePickerFormat.Time
    11. TimeCom3.Format = DateTimePickerFormat.Time
    12. TimeCom4.Format = DateTimePickerFormat.Time
    13. TimeCom5.Format = DateTimePickerFormat.Time
    14. TimeCom6.Format = DateTimePickerFormat.Time
    15. TimeCom7.Format = DateTimePickerFormat.Time
    16. TimeCom8.Format = DateTimePickerFormat.Time
    17. TimeCom9.Format = DateTimePickerFormat.Time
    18. TimeCom10.Format = DateTimePickerFormat.Time
    19. TimeCom11.Format = DateTimePickerFormat.Time
    20. TimeCom12.Format = DateTimePickerFormat.Time
    21. TimeCom13.Format = DateTimePickerFormat.Time
    22. TimeCom14.Format = DateTimePickerFormat.Time
    23. TimeCom15.Format = DateTimePickerFormat.Time
    24. EndSub

    VB.NET-Quellcode

    1. For each c as control in me.Controls
    2. if typeof(c) is Datetimepicker then
    3. dim d = directcast(c, datetimepicker)
    4. d.Format = ...
    5. d.CustomFormat = ...
    6. end if
    7. next


    Dies funktioniert jedoch nur wenn sich diese Controls nicht innerhalb anderer Containercontrols befindet. Hier müsste man diese dann rekursiv durchgehen.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Hi fichz :D ,

    erstmal vielen Dank für deine Hilfe :thumbsup: . Soweit funktioniert es ohne Fehlermeldung. Könntest du es noch kurz erläutern, weil mir das nicht so geläufig ist.

    Gibt es auch die Möglichkeit, dass er nur die Datetime-Objekte formatiert, die mit dem Namen "XY" beginnen oder enthalten?

    Vielen Dank.

    LG

    Sam

    VB.NET-Quellcode

    1. For each c as control in me.Controls ' Me.Controls enthält eine Auflistung ALLER (auch Labels, Buttons,...) Controls der Form selbst
    2. if typeof(c) is Datetimepicker then ' Hier wird jeden Control überprüft ob es sich um ein Datetimepicker Objekt handelt
    3. dim d = directcast(c, datetimepicker) ' Hier wird das control in ein datetimepicker-Control umgewandelt
    4. if d.name.Startswith("XY") then ' Bzw. d.name.Contains("XY")
    5. d.Format = ... ' Anschließend kann man auf die Properties zugreifen
    6. d.CustomFormat = ...
    7. end if
    8. end if
    9. next


    Hier mal erklärt ;)
    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    sinsibo schrieb:

    nur die Datetime-Objekte formatiert
    Solch ist suboptimal, denn schnell ist mal ein Control umbenannt und fällt dann in die Gruppe rein oder aus ihr raus.
    Nutze zur Unterscheidung ggf. die Tag-Property. Die findest Du im Designer und ist für eine solche Aufgabe prädestiniert.
    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!
    Hi RodFromGermany,

    danke erstmal auch für deine Hilfe.
    Nutze zur Unterscheidung ggf. die Tag-Property.

    meinst du unter (DataBindings->Tag)?

    Falls Ja, wie siehe der Lösungsansatz aus? Ich müsste diesen Zusatz in den For Each-Teil miteinfügen, oder?

    Lg

    Sam

    sinsibo schrieb:

    meinst du unter
    Nein, ich meine die im Form-Designer:
    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!
    So sieht meine Lösung aus und Sie funktioniert :D . Habe allen DateTimeObjekte den gleichen Tag-Namen zu gewiesen und lasse nur die Objekt-Eigenschaften ändern, die den Tag-Namen "Time" besitzen.

    VB.NET-Quellcode

    1. For Each timeset As Control In Me.Controls
    2. If TypeOf (timeset) Is DateTimePicker ThenDim d = DirectCast(timeset, DateTimePicker)
    3. If d.Tag = "Time" Thend.Format = DateTimePickerFormat.Custom
    4. d.CustomFormat = "HH:mm"
    5. End If
    6. End IfNext


    Kann mir einer einen Beispiel-Code geben, wie man z.B. Objekt-Eigenschaften ändern kann, die ein Teil eines Namens erthalten.
    Z.B.: Bei 10 Buttons, die als Namen "Button*** + fortlaufenden Nummer" haben (ButtonStart1, ButtonStop2 etc.). Da möchte ich nur die Objket-Eigenschaften ändern, die das Wort "Button" enthalten.
    Vielen Dank.

    Gruß
    Sam

    sinsibo schrieb:

    Kann mir einer einen Beispiel-Code geben
    Hast Du die Posts nicht gelesen?
    Code-Bettelei ist hier nicht gern gesehen, insbesondere wenn der Eigenanteil sehr niedrig ist.
    Zeig was Du hast, schreib was es soll und was es macht und dann werden wir sehen.
    Deine Hausaufgaben jedenfalls machen wir Dir nicht.
    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!
    @ RodFromGermany

    Scherzkeks, dass was du unter Codebettelei verstehst, verstehe ich als Hilfe. Wäre ich der Sprache VB mächtig, müsste ich nicht Frage. Klar soweit. Außerdem habe ich keinen darum gebeten meine Aufgabe oder wie du das formulierst Hausaufgabe zu machen, sondern nur gebeten mir ein Beispielcode zu zeigen, welche die Thematik eventuell umreist aus den ich dann versuchen kann mein Problem zu lösen. Wenn mir die Termini fehlen, weil ich Sie einfach nicht weiß, ist die Suche bei google ergebnislos/erfolglos. Da bringt das umschreiben des Problem auch nciht viel. Das muss ich dir hoffentlich nicht noch beweisen.

    Also erkläre mir bitte, wie du aus, "kann mir jmd. einen Beispielcode geben" verstehen kannst "Programmier mir meine Aufgabe bitte" :cursing:

    Wenn ich jeden, der mich etwas fragen würde so arrogant anworten würde, wie DU "insbesondere wenn der Eigenanteil sehr niedrig ist", dann gute Nacht Deutschland.

    Vielleicht habe wir uns auch nur falsch verstanden.

    Gruß

    Sam