mikrocontroller.net

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


Autor: Valentin Diring (valentin)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geht das überhaupt, wenn Du ohne Index arbeitest?

Autor: Valentin Diring (valentin)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Valentin Diring (valentin)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht 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)
    // get the name of the sender if it is a control
    if (!(sender is Control)) return;
    var senderName = ((Control)sender).Name;

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

    // if this contains a field with name textBoxName
    var textBoxFieldInfo = this.GetType().GetField(textBoxName, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
    // get that object (no type/null checks!)
    var textBoxObject = textBoxFieldInfo.GetValue(this);
    // get TextBox.Text property for this object
    var textBoxPropertyInfo = textBoxObject.GetType().GetProperty("Text");
    // and set the value
    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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.