Buttons mit Variablennamen ansprechen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von pablotronic.

    Buttons mit Variablennamen ansprechen

    Hallo Forum.

    Lange, erfolglose Suche fuehrt mich hierher.

    In meinem VB.Net Projekt Habe ich einige Buttons bei welchen mit Backgroundimage der Status (Ein oder Aus) dargestellt ist. Mit diesen Buttons springe ich innerhalb dieses Forms in die jewiligen "_Click" Rutinen. Voellig normal.

    Diese Rutinen rufen nun ihrerseits alle die selbe Rutine in einem anderen Modul auf. Dort geschieht die eigentliche Arbeit, das Umschalten von Elektronikschaltern. Weil diese Rutine auch von einigen anderen Modulen(nicht durch Buttons) aufgerufen werden kann, muss sie auch das Backgroundimage eines bestimmten Buttons aendern.
    Da nun ja jeder Button welcher diese Rutine aufrufen kann, anders heisst, muss ich diesen jeweiligen Button mit einer Variable benennen koennen. Original heissen die z. B. "Btn_ITS238". Somit lauter der Befehl zum Aendern des Images so:
    Btn_ITS238.BackgroundImage = System.Drawing.Image.FromFile("ImagesOwn\ITS2381.JPG")

    Was ich nun haben muss ist etwas in dieser Art:

    Buttonname = "ITS" &Port (Wobei Port ein String mit dem Inhalt von "000" bis "255" ist und somit den zu aendernden Button bezeichnet)
    Buttonname.BackgroundImage = System.Drawing...............


    Geht sowas? Ich stehe da nin wirklich auf dem Schlauch.

    Danke fuer jede Hilfe.
    Gruesse, Paul

    Hallo,

    das könnte eine Lösung für dein Problem sein:

    VB.NET-Quellcode

    1. Sub SetButtonPicture(ByVal ButtonNumber As String)
    2. Dim ActiveButtonName As String = "Btn_ITS" & ButtonNumber
    3. For Each control As Control In Me.Controls
    4. If control.Name.StartsWith("Btn_ITS") Then
    5. If control.Name = ActiveButtonName Then
    6. control.BackgroundImage = System.Drawing.Image.FromFile("Das Bild für den aktiven Button")
    7. Else
    8. control.BackgroundImage = System.Drawing.Image.FromFile("Das Bild für alle anderen Buttons")
    9. End If
    10. End If
    11. Next
    12. End Sub

    Super. Das hilt mir schon mal

    Hallo Phil, hallo Nesh

    Herzlichen Dank fuer eure Hilfe. Beide Versionen fuehren bei mir zum Ziel.
    Einziger Nachteil.............
    Ich habe zurzeit 2 Forms im Einsatz. Auf beiden koennen solche Buttons liegen. (Koennen aber auch noch mehr Forms werden.)
    Im Moment mache ich es so, dass ich hald mit beiden Formnamed da durchgehe.

    Dim
    c As Control = Wohnung01.Controls("Btn_" & ButtonNumber)
    Dim c As Control = Multimedia.Controls("Btn_" & ButtonNumber)

    Wenn ihr mir jetzt grad auch noch die Loesung liefert, wie ich den Formnamen auch variabel gestalten kann?
    Ich versuche natuerlich weiterhin, es selber herauszufinden.


    Also wirklich.............schnelle und gute Hilfe was ihr mir da geboten habt! :thumbsup:

    pablotronic schrieb:

    Wenn ihr mir jetzt grad auch noch die Loesung liefert, wie ich den Formnamen auch variabel gestalten kann?

    Die Klasse Application hat eine Application.OpenForms Collection, bei denen Du die Forms wie bei Collections üblich mit Namen oder Index ansprechen kannst.

    Allerdings habe ich Dein Ursprungsproblem wohl nicht ganz verstanden: würde es nicht leichter sein für alle Deine entsprechenden Buttons per AddHandler eine einzige EventHandler Methode zu definieren, in der Du ja den entsprechenden Button im Sender Object mitgeliefert bekommst ?

    Es geht zuegig weiter

    Hallo Kangaroo
    Danke fuer deinen Tip. Ich bin jetzt schon soweit, dass ich alle Buttons in einer Datei speichere und sie beim Programstart lade. Das verkleinert mir auf jeden Fall mal das Mainform. Vor allem per AddHandler eine einzige EventHandler Methode zu machen ist wirklich gut und macht die ganze Sache uebersichtlicher.
    Nun, da du mein Ursprungsproblem nicht mitbekommen hast:
    In zurzeit 2 Forms, eines stellt den Plan meiner Wohnung dar, das andere meinen Fernseher mit allem was dazugehoert, gibt es recht viele Buttons. Wenn die geklickt werden muessen in verschiedenen Modulen Aktionen ausgefuehrt werden. 1. Senden von Schaltinformationen zu den Schaltern der Wohnung. 2. Anpassen des Button Background Bildes um den Status (ein oder aus) sichtbar zu machen. 3. Anpassen von Buttons auf einer HTML Seite.
    Zusaetzlich gibt es eine Rutine welche periodisch die Stati von bestimmten Schaltern abfragt. Wenn da nun lokal jemand etwas umgeschaltet muss auch das in den Button Background Bildern nachgefuehrt werden.
    Und zu guter letzt gibt es auch noch eine WEB Seite welche all diese Schalter umschalten kann. Auch das muss auf dem Hauptrechner ersichtlich sein.
    Du siehst, viele gute Gruende um all diese Buttons "variabel" zu gestalten

    So. Nun arbeite ich mit euren Tips weiter und melde mich gerne wieder, wenn der naechste Knackpunkt ansteht.
    Aehhhh, was ich noch sagen muss: Ich bin mich die Programmiererei mit Klassen, und all dem Zeug noch nicht gewohnt. Ich komme aus der C-64, ZX81 und MSX Generation und dort programmiert man ziemlich gerade aus. Aber, ich lerne jeden Tag etwas neues.

    Gruesse an alle, Paul