Forum: PC-Programmierung Mehrere Objekte in einer Schleife bearbeiten?


von Valentin D. (valentin)


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.

von Karsten (Gast)


Lesenswert?

Geht das überhaupt, wenn Du ohne Index arbeitest?

von Valentin D. (valentin)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

von Valentin D. (valentin)


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.

von Arc N. (arc)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.