Mehrere Objekte in einer Schleife bearbeiten?

#1528775
Lesenswert?

Hallo Zusammen
Ich habe folgende Frage.
Wie kann man mehrere Objekte in einer Schleife bearbeiten?

Ich will die Eigenschaften Eines der Acht Buttons verändern, wie es der 
Beispiel unten zeigt.


Private Sub btnPortAPinSignal0_Click(...) _
        Handles btnPortAPinSignal0.Click, btnPortAPinSignal1.Click, _
                btnPortAPinSignal2.Click, btnPortAPinSignal3.Click, _
                btnPortAPinSignal4.Click, btnPortAPinSignal5.Click, _
                btnPortAPinSignal6.Click, btnPortAPinSignal7.Click

        If sender.Equals(btnPortAPinSignal0) Then
            If ... Then btnPortAPinSignal0.Text = "..." Else _
                        btnPortAPinSignal0.Text = "..."
        End If

        If sender.Equals(btnPortAPinSignal1) Then
            If ... Then btnPortAPinSignal1.Text = "..." Else _
                        btnPortAPinSignal1.Text = "..."
        End If

End Sub


Ich weiß leider nicht, nach welchen Stichpunkt ich in der MSDN-Library 
suchen muss.
Also wäre ich für jede Hilfe dankbar.
#1528834
Lesenswert?

Valentin R. schrieb:
> Ich habe schon versucht den String "btnPortAPinSignal" mit dem Intervall
> einer For-Schleife zu verknüpfen. Deshalb die nummerierten Namen.

Du hättest anstelle von einzeln durchnummerierten Variablen ein Array 
benutzen sollen.
Die Namen der Variablen existieren nicht mehr, wenn das Programm einmal 
läuft. Daher kommst du da mit Stringverarbeitung nicht weiter.

Vielleicht kannst du dir ja ein Array von Referenzen auf deine Objekte 
anlegen (da kenn ich VB zu wenig), in welches du Verweise auf deine 
Objekte anlegst.
#1528926
Lesenswert?

Habe es geschaft.
Ich verstehe leider nicht wieso, aber man muss die deklaration in der 
Ereignis-Methode machen, Modulweit geht es irgendwie nicht.

Dim ObjGroup(7) As Button
ObjGroup(0) = btnPortAPinSignal0 : ObjGroup(1) = btnPortAPinSignal1
ObjGroup(2) = btnPortAPinSignal2 : ObjGroup(3) = btnPortAPinSignal3
ObjGroup(4) = btnPortAPinSignal4 : ObjGroup(5) = btnPortAPinSignal5
ObjGroup(6) = btnPortAPinSignal6 : ObjGroup(7) = btnPortAPinSignal7

Danke für die Anregungen.
#1528955
Lesenswert?

Karl heinz Buchegger schrieb:
> Valentin R. schrieb:
>> Ich habe schon versucht den String "btnPortAPinSignal" mit dem Intervall
>> einer For-Schleife zu verknüpfen. Deshalb die nummerierten Namen.
>
> Du hättest anstelle von einzeln durchnummerierten Variablen ein Array
> benutzen sollen.

Ja.

> Die Namen der Variablen existieren nicht mehr, wenn das Programm einmal
> läuft. Daher kommst du da mit Stringverarbeitung nicht weiter.

Nein.

Es ginge mit Type Introspection...auch in einem aktuellen VB (in C# 
sieht das in etwa so aus wie unten)
1
    // get the name of the sender if it is a control
2
    if (!(sender is Control)) return;
3
    var senderName = ((Control)sender).Name;
4

5
    // create new textBox name
6
    var textBoxName = senderName.Replace("button", "textBox");
7

8
    // if this contains a field with name textBoxName
9
    var textBoxFieldInfo = this.GetType().GetField(textBoxName, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
10
    // get that object (no type/null checks!)
11
    var textBoxObject = textBoxFieldInfo.GetValue(this);
12
    // get TextBox.Text property for this object
13
    var textBoxPropertyInfo = textBoxObject.GetType().GetProperty("Text");
14
    // and set the value
15
    textBoxPropertyInfo.SetValue(textBoxObject, senderName + "->" + textBoxName, null);

>
> Vielleicht kannst du dir ja ein Array von Referenzen auf deine Objekte
> anlegen (da kenn ich VB zu wenig), in welches du Verweise auf deine
> Objekte anlegst.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren