Problem beim Aktualisieren von Steuerelmenten auf anderem Formular

  • VB.NET

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

    Problem beim Aktualisieren von Steuerelmenten auf anderem Formular

    Hallo Zusammen,

    ich habe folgendes Problem und habe es auch durch Suche bisher nicht lösen können. Ich denke aber es liegt daran, dass ich nicht die korrekten Suchausdrücke kenne. Ich programmiere in VB nur nebenbei und habe mir das was ich weiß angelesen. Daher kann es sein, dass ein paar Grundlagen fehlen.

    Ich habe drei Formulare: Main, Sub1, Sub2
    Ich rufe in Main das Formular Sub1 auf indem ich folgendes tue:

    Quellcode

    1. Dim NF as Form = Sub1
    2. NF.ShowDialog()

    Auf dem Sub1 kann ich nun ein weiteres Form aufrufen um etwas anzulegen:

    Quellcode

    1. Dim ANF as Form = Sub2
    2. ANF.ShowDialog()

    Wenn ich nun mit Sub2 fertig bin, soll ein Listview auf Sub1 mit Daten von Sub2 aktualisiert werden:

    Quellcode

    1. Dim NVLI As ListViewItem = New ListViewItem
    2. With NVLI
    3. .Name = GetDateString() & GetTimeString()
    4. .ImageIndex = iIndex
    5. .Text = TextBox1.Text
    6. .SubItems.Add(TextBox2.Text)
    7. .SubItems.Add(TextBox3.Text)
    8. .SubItems.Add(TextBox4.Text)
    9. .SubItems.Add(TextBox5.Text)
    10. .SubItems.Add(TextBox6.Text)
    11. End With
    12. Sub1.listView1.Items.Add(NVLI)

    Es läuft auch alles ohne Fehler durch. Allerdings erscheint kein Listviewitem.

    Ich habe nun auf Main den Aufruf für Sub1 schon einmal geändert:

    Quellcode

    1. 'Dim NF as Form = Sub1
    2. 'NF.ShowDialog()
    3. Sub1.ShowDialog()

    Dann funktioniert es.

    Allerdings hätte ich gerne den bestehenden Aufruf beibehalten...
    Weiß jemand einen Tip wo ich mich vertan habe?

    MfG
    FHA

    FHA schrieb:

    Wenn ich nun mit Sub2 fertig bin, soll ein Listview auf Sub1 mit Daten von Sub2 aktualisiert werden:
    Wie sieht denn genau dieser Code aus?
    Kommt bei Dir irgendwo New Sub1 und New Sub2 vor?
    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!
    Hi!

    Also im Main sieht der Aufruf von Sub1 so aus:

    Quellcode

    1. Dim NF As New Sub1
    2. With NF
    3. .ShowDialog()
    4. End With
    5. NF = Nothing


    Der Aufruf von Sub2 aus Sub1 heraus sieht so aus:

    Quellcode

    1. Dim ANF As New Sub2
    2. ANF.ShowDialog()

    Ich hatte im ersten Teil tatsächlich die falsche Stelle kopiert, Sorry.
    Wie du sagst wird mit NEW gearbeitet.
    MfG
    FHA
    yuhu^^
    Arbeite mit Events....
    nee mal ehrlich...was bringt das?
    Das was ich Verstanden habe:
    Du rufst von Form1 die Form Sub1 auf...
    von der rufst du die Form Sub2 auf ( lol )
    in der Form Sub2 setzt du die Sachen fürs ListView...okay geht nocht

    dann willste die Daten wieder auf die Sub1 setzen...schön schön...schwerer gings nicht?

    naja...ich bin mal so frei:

    Nur wenn du das unten gelesen hast^^

    VB.NET-Quellcode

    1. Public Class Sub1 ' Deine Sub1, oder Form2 oder was weiß ich
    2. Sub derAufruf()
    3. Dim anf As New Sub2
    4. AddHandler anf.SetValue, AddressOf setvalue
    5. anf.ShowDialog()
    6. End Sub
    7. Sub SetValue(item As ListViewItem)
    8. ListView1.Items.Add(item)
    9. End Sub
    10. End Class

    VB.NET-Quellcode

    1. Public Class Sub2
    2. Public Shared Event SetValue(item As ListViewItem)
    3. Sub setzeWerte()
    4. ' dein Code
    5. RaiseEvent SetValue(dein_listviewitem)
    6. End Sub
    7. End Class

    Voilà...und du hast deinen Zugriff.


    Und etwas Lesestoff: msdn.microsoft.com/en-us/library/ms973905.aspx

    mehr als das kann ich dir nicht geben....sonst hätte ich dir die Lösung schon komplett gegeben...und das wollen wir hier ja nicht...so ein Copy&Paste-Code...man soll ja was lernen
    Nun - Du hast 2 modale Dialoge, wenn Du Dialoge untereinander und mit dem Hauptfenster interagieren lassen willst, verwende nicht-modale Dialoge:

    VB.NET-Quellcode

    1. Private dlg As Form2
    2. Private Sub xxx()
    3. If dlg Is Nothing OrElse dlg.IsDisposed Then
    4. dlg = New Form2
    5. End If
    6. dlg.Show() ' Dialog kann hinter das Hauptfenster geklickt werden
    7. ' oder
    8. 'dlg.Show(Me) ' Dialog kann nicht hinter das Hauptfenster geklickt werden
    9. End Sub
    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!

    AliveDevil schrieb:

    VB.NET-Quellcode

    1. dlg.Show(Me) = dlg.ShowDialog()
    Schreib mal genau diesen Quelltext in ein VB-Programm. :thumbdown:
    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!
    Dann schreib das doch hin. :D :D :D
    dlg.Show(Me) - nicht modaler Dialog, man kann auf ihm und dem aufrufenden Fenster rumklicken.
    dlg.ShowDialog() - modaler Dialog, man kann nur auf ihm rumklicken.

    Genau dies unterscheidet unsere beiden Posts voneinander.
    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!
    Hallo Zusammen,

    Zunächst mal vielen Dank für Eure Antworten.
    Habe das Eventhandling eingebaut und gleich zwei Warnungen kassiert. Nach ein bißchen lesen in der Hilfe zu diesem Fehler weiß ich nun auch, dass es eigentlich nicht wirklich sauberes coden ist was ich da tue.

    Allerdings war es für mich ein einfacher Weg mein Formular mit Standardeinstellungen zu öffnen.

    Wenn ich ein Formular aufrufe mit Sub1.Show (oder auch Showdialog), die gewünschten Daten eingebe und das Formular bestätige läuft alles wunderbar. Wenn ich jetzt aber Sub1 nochmals aufrufe, dann sind immer noch alle Felder mit den vorherigen Daten gefüllt.
    Wenn ich das Formular aber zunächst neu instanziere und dann die Instanz aufrufe wird immer das leere Formular geöffnet. Mit genau den Einstellungen die ich im Editor vorgegeben habe.

    Wahrscheinlich ist das ein ... Weg. Aber bisher kannte ich noch keinen anderen außer aufwändig alle Felder in der Load-Sequenz des Formulars zu setzen.

    Ist es völliger Blödsinn was ich da mache? Gibt es eine einfache Alternative?

    Gruß
    FHA
    Sobald Du New aufrufst, wird der Ausgangszustand hergestellt.
    Du musst die Daten halt irgendwo ablegen (Speicher oder Datei) und wenn Du den Dialog erneut aufrufst, muss der diese Daten einlesen und anzeigen.
    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!