Objekte mit fortlaufender Nummerierung

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von 42deluxe.

    Objekte mit fortlaufender Nummerierung

    Hi Leute,

    ich möchte mehrere Objekte (konkret zwei Stopwatch Instanzen) über fortlaufende Variablennamen ansprechen.

    Auf meinem Form hab ich zwei Stoppuhren, die unabhängig voneinander laufen sollen. StoppUhr1 und StoppUhr2. Welche Stoppuhr angesprochen werden soll, ergibt sich aus Daten, die über die serielle Schnittstelle kommen. Im simpelsten Fall eine 1 oder eine 2.

    Jetzt fehlt mir der Ansatz, wie ich Methoden für "StoppUhr" & intNr ausführen kann. Mit

    VB.NET-Quellcode

    1. Me.controls("StoppUhr" & intNr.toString)
    komme ich nicht weiter, weil ich so offenbar nur auf die Methoden von me.controls zugreifen kann.


    Wie löst man sowas am besten?

    Schomal Danke und viele Grüße.

    Edit:

    So vielleicht? Mit einem Array?

    VB.NET-Quellcode

    1. Dim StoppUhr(2) As StopwatchStoppUhr(0) = New StopwatchStoppUhr(intNr).Start()



    Das wäre ja fast zu einfach. :huh:

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

    Hey,

    entweder, wie Du ja schon selber rausgefunden hast, machst Du das über ein Array oder noch etwas eleganter, Du nutzt ein

    VB.NET-Quellcode

    1. Dictionary(Of String, StopWatch)


    Wobei hier String der Key ist. Diesen Datentyp kannst Du beliebig anpassen, z. B. einen Integer als Key nehmen usw.

    Beispiel:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _dictWatches As New Dictionary(Of String, Stopwatch)
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. _dictWatches.Add("watch1", New Stopwatch)
    5. _dictWatches.Add("watch2", New Stopwatch)
    6. End Sub
    7. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    8. _dictWatches("watch1").Start()
    9. End Sub
    10. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Statt sie über einen Key anzusprechen würde ich das über den Index in einem Array tun, also so:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim StoppUhr(1) As Stopwatch
    3. Public Sub New()
    4. InitializeComponent()
    5. StoppUhr(0) = New Stopwatch
    6. StoppUhr(1) = New Stopwatch
    7. End Sub
    8. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    9. StoppUhr(1).Start()
    10. End Sub
    11. End Class
    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!
    M.E. hat @42deluxe: den Fehler gemacht, ein Array für Instanzen mit den Instanzen selbst zu identifizieren und dabei die Instanziierung der Feldelemente vergessen.
    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!
    Danke Leute.

    Ich hab es jetzt so gelöst, wie Rod es vorgeschlagen hat. Mit dem Array klappt das prima. Vielen Dank.

    Aber vielleicht kannst du mir das nochmal kurz erklären:

    RodFromGermany schrieb:


    M.E. hat @42deluxe: den Fehler gemacht, ein Array für Instanzen mit den Instanzen selbst zu identifizieren und dabei die Instanziierung der Feldelemente vergessen.
    Meinst du damit, dass ich Deklaration und Instanziierung gleichzeitig versucht hab? Ja, das hat nicht geklappt.
    Mit deiner Version funktioniert es. :)

    Ich mühe mich noch etwas durch die OOP, deshalb hakt es noch ziemlich oft.

    42deluxe schrieb:

    Aber vielleicht kannst du mir das nochmal kurz erklären:
    Lernen durch Schmerz:

    VB.NET-Quellcode

    1. Dim StoppUhr(1) As Stopwatch
    2. MessageBox.Show(StoppUhr(0).ToString)
    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!