CheckBox.Properties - CheckBox.Image lässt sich nicht ansprechen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ThomasG82.

    CheckBox.Properties - CheckBox.Image lässt sich nicht ansprechen

    Moin,

    hoffe es kann mir jemand helfen (vmtl. hab ich bloß einen Dreher irgendwo).

    Ich habe auf einem TAB in einer GROUPBOX eine/mehrere CHECKBOX/en.
    Nun will ich das IMAGE, welches anstatt des Textes angezeigt wird, ändern. Allerdings lässt sich .IMAGE nicht ansprechen sondern nur .BACKGROUNDIMAGE
    Kann mir jemand erklären wo da der Fehler ist? Hab mir den Teil im Designer angeschaut und da wird ja normal Me.CheckBox.Image initialisiert.

    VB.NET-Quellcode

    1. for CheckBoxNr = 1 to 10
    2. 'funktioniert um die Checkboxen ein und auszublenden (CheckBoxNr ist meine Laufzeitvariable)
    3. GroupBox_Programme.Controls("CheckBox_Prog" & CheckBoxNr).Visible = TRUE
    4. 'laden des Images in der Beschreibung
    5. GroupBox_Programme.Controls("CheckBox_Prog" & CheckBoxNr).Image = Bild.png
    6. next


    Kann mir das jemand erklären? ;(

    So Lösung gefunden - wen es interessiert: DirectCast ist die Lösung !!!

    VB.NET-Quellcode

    1. DirectCast(GroupBox_Programme.Controls("CheckBox_Prog" & CheckBoxNr), CheckBox).Image = Bild.png

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ThomasG82“ ()

    Ich wäre eher durch die Groupbox.Controls Auflistung iterieren und hätte den Type des Controls geprüft um Dinge mit dem Control zu tun. Dann kann man nämlich die Controls gescheit benennen und umbenennen wie man will. Den „CheckBox_Prog123446“ ist kein aussagekräftiger Name.

    Zudem ist dein Code dirty. CheckBoxNr ist nämlich nen Integer und kein String.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @ThomasG82 Besser wäre es, wenn Du die CheckBoxen in ein Array packst und Du dann das Array durchläufst.
    Das sichert die Funktionalität nämlich auch, wenn Du Deine Controls umbenennst.

    VB.NET-Quellcode

    1. Dim cbs() = { CheckBox1, CheckBox2, CheckBox3 }
    2. For Each cb In cbs
    3. cb.Visible = True
    4. Next
    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!
    @mrMo Ja wäre auch ne Variante. Habe ich versucht, war allerdings nicht ans gewünschte Ziel gekommen, was allerdings an mir liegen wird und nicht am Code. :/ Hab mit den .Controls manchmal so meine Probleme, die wollen immer nicht so wie ich will bzw. ich bin zu doof ihre wirkliche Funktionsfähigkeit zu verstehen. (im Originalcode ist mein CheckBoxNr auch ein Integer - war nur hier zur Problemfindung stark verkürzt)

    @RodFromGermany habe ich auch schon drüber nachgedacht alles in ein Array zu legen. Würde auf alle Fälle teile meines Codes vereinfachen, jedenfalls wenn man den ganzen Code ansieht. Aber zum Glück habe ich nur 10 CheckBoxen damit hält sich die Menge in Grenzen und ich kann es durch die Schleife und die Laufzeitvariable in Grenzen halten. Aber werde mal, wenn alle Probleme behoben sind, nochmal überlegen und dann vlt. umsetzen.
    Update - das mit dem Array ist ne coole Variante wenn ich vorher immer so genau wüßte wie viele ich AN bzw. AUS machen muss.
    Allerdings ist das bei mir sehr spezifisch und ich kann nicht der Reihe nach gehen. Somit müsste ich ja wieder erst ne Kruxs zusammen schustern um spezielle abzufragen. Und ich hab ja auch noch mehr als nur die Sichtbarkeit. Daher nehme ich das Array wenn ich mal Zusammenhänge habe - dafür ist die Idee cool, bei mir muss ich leider bei der Einzelheit bleiben. ||

    Danke auf alle Fälle

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