Progressbar in Form ansprechen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Progressbar in Form ansprechen

    Hallo ich rufe eine zweite Form auf mit

    VB.NET-Quellcode

    1. Dim dlgFormMenue As New FormKasseAbrechnen
    2. dlgFormMenue.[FormName] = "FormMenue"
    3. dlgFormMenue.ShowDialog(Me)


    in dieser zweiten Form werden einige Berechnungen getätigt die sich aber in einem Modul befinden.
    In dem Modul möchte ich gerne einen Progressbar ansteuern der sich in der zweiten Form befindet.

    mit

    VB.NET-Quellcode

    1. FormKasseAbrechnen.ProgressBar1.Visible = True
    2. FormKasseAbrechnen.ProgressBar1.Maximum = 10
    3. FormKasseAbrechnen.ProgressBar1.Value = (hier den Wert des Progressbar)

    funktioniert es nicht.

    Ich vermute das das Modul nichts mit " FormKasseAbrechnen" anfangen kann.

    Wie spreche ich denn das zweite Modul an?
    @frifri Du musst über die Instanz des Dialoges gehen, nicht über den Klassennamen.
    Verstehe diesen Thread: Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    Ggf. könnte man dem Modul diese ProgressBar mit als Parameter übergeben, sodass das Modul den Wert ändert. Aber:

    frifri schrieb:

    In dem Modul möchte ich gerne einen Progressbar ansteuern der sich in der zweiten Form befindet.
    Warum sollte das Modul, welches von jedem Platz in Deinem Code angesprochen werden kann, explizit ein CE in einem spezifischen Form ansprechen/manipulieren dürfen? Das ist ein Designfehler. Gegenfrage: Wozu braucht es für die Berechnungen ein Modul, wenn es explizit um FormKasseAbrechnen-Berechnungen geht? Mach aus dem Modul eine Klasse, die von dlgFormMenue instanziiert wird und lass diese Klasseninstanz zu entsprechenden Zeitpunkten ein Event feuern, welches Dein dlgFormMenue über Status-/Wertänderungen informiert. Und dlgFormMenue nimmt diese Events zur Kenntnis und aktualisiert selber aufgrund der Event-Datenlieferung seine eigene ProgressBar.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.

    RodFromGermany schrieb:

    @frifri Du musst über die Instanz des Dialoges gehen, nicht über den Klassennamen.
    Verstehe diesen Thread: Dialoge: Instanziierung von Forms und Aufruf von Dialogen


    ich hab mich jetzt mal versucht in den Thread einzuarbeiten.

    Du erstellst ja mit

    VB.NET-Quellcode

    1. frm2 = New Form2
    2. frm2.Show(Me)

    eine neue Instanz von Form2

    ansprechen tust du dies mit

    VB.NET-Quellcode

    1. If sender Is frm2 Then
    2. MessageBox.Show("Event frm2 empfangen")
    3. ElseIf sender Is frm3 Then
    4. MessageBox.Show("Event frm3 empfangen")
    5. End If

    bei mir weiß mein Modul aber gar nix von dem name: frm2 oder frm3 (wenn die bei mir so heißen würden. Bei mir heißt das ja dlgFormMenue das bekommt das Modul aber doch gar nicht mit)
    wenn ich in FormKasseAbrechnen nach Me.Name frage bekomme ich als String FormKasseAbrechnen und nicht den Namen der Instanz.
    Ich verstehe die Sache wohl nicht.
    @frifri Schmeiß das Modul raus und pack den Code in die relevante (Form-)Klasse.
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:

    @frifri Schmeiß das Modul raus und pack den Code in die relevante (Form-)Klasse.


    Das wäre jetzt Plan B gewesen :)

    Aber mich interessierte halt ob es geht und wie. Nur so zum lernen.

    danke für die Hilfe



    Warum sollte das Modul, welches von jedem Platz in Deinem Code angesprochen werden kann, explizit ein CE in einem spezifischen Form ansprechen/manipulieren dürfen? Das ist ein Designfehler. Gegenfrage: Wozu braucht es für die Berechnungen ein Modul, wenn es explizit um FormKasseAbrechnen-Berechnungen geht? Mach aus dem Modul eine Klasse, die von dlgFormMenue instanziiert wird und lass diese Klasseninstanz zu entsprechenden Zeitpunkten ein Event feuern, welches Dein dlgFormMenue über Status-/Wertänderungen informiert. Und dlgFormMenue nimmt diese Events zur Kenntnis und aktualisiert selber aufgrund der Event-Datenlieferung seine eigene ProgressBar.


    Da müsste ich mich erst mit beschäftigen und die Grundlagen verstehen. Klasse ist nicht so meins.
    Danke für die Anregung und die Hilfe

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

    frifri schrieb:

    Klasse ist nicht so meins.
    Das solltest Du ganz schnell hinter Dir lassen.
    Übrigens sind praktisch alles, was Du vom Framework bekommst, Klassen.
    Und die müssen mit New instanziiert werden und dann kannst Du mit der Instanz arbeiten.
    Vergisst Du das New, kommt eine Null-Referenz-Exception, die Dir sagt, dass Du das Objekt erst mit New instanziieren musst.
    Ganz einfach. ;)
    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).
    VB-Fragen über PN / Konversation werden ignoriert!