Listview in neuer Form befüllen

  • Allgemein

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

    Listview in neuer Form befüllen

    Hallo Forum,

    mein Problem:

    Ich lese hexadezimale Befehle aus und möchte die nun mit einem listView anzeigen lassen. Das klappt auch alles wunderbar in einer Form (Form2).

    Allerdingsmöchte ich, wenn ich einen Button drücke und er Befehl reinkommt, eine neue Form öffnen in der das Listview enthalten ist und den Befehl dort eintragen.

    Wenn ich den Button drücke öffnet er mir auch die neue Form (Form3) mit Listview, aber der Befehl wird dort nicht eingetragen.

    Ein Auzug meines Codes, den ich in Form2 aufrufe:

    VB.NET-Quellcode

    1. L.SubItems.Add(command)
    2. L.SubItems.Add(length)
    3. Form3.ListView1.Items.Add(L) 'hier müsste er das Listview in Form 3 befüllen?!


    Gruß
    timeOut
    @TimeOut:, @Techno7:: Zunächst solltet Ihr wissen, dass man auf Instanzen von Formen zugreift. Gugst Du hier.
    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!
    Ich werde trotzdem nicht so recht daraus schlau :/

    Ich meine die Form3 öffnet er und auch Buttons die ich dort verwende funktionieren.

    Nur übernimmt er meine Daten, die in die listview in Form3 eingetragen werden sollen, nicht aus Form2.
    @TimeOut: Greife nicht von außen auf das ListView zu, sondern gib der Form eine Methode, der Du die entsprechende Information mitgibst und die sich dann innerhalb der Form um alles kümmert.
    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!
    Habe jetzt die Funktion, die mir das Listview füllt in Form3 geschrieben und übergebe aus Form2 die benötigten Variablen.

    Das macht er auch alles ohne Probleme. :thumbup:

    Listvie1.Show() (in Form3) erzeugt bzw. zeigt mir allerdings jetzt keine Tabelle :(

    In Form3_Load setzt er mir die ja zusammen.
    Ich finde das ganze immer ein bisschen unübersichtlich:

    VB.NET-Quellcode

    1. Public Class ListviewForm
    2. inherits Form
    3. Public Sub SetData(items as listviewitem())
    4. me.listview1.items.addRange(items)
    5. End Sub
    6. End Class
    7. Publi Class Gui
    8. Sub Foo()
    9. Dim arr() as ListviewItem
    10. me.listview1.items.CopyTo(arr,0)
    11. ListviewForm.SetData(arr)
    12. End Sub
    13. End Class

    /nicht getestet
    /nicht getestet

    TimeOut schrieb:

    Das macht er auch alles ohne Probleme.
    Na dann poste mal Deinen Code.
    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

    Also in Form2 rufe ich diese Funktion auf:

    VB.NET-Quellcode

    1. Form3.IntoList(txtRcvHData.Text) ' mein empfangener Hex-Code aus Form2 in Form3 übregeben


    Anschließend in Form3 diese:

    VB.NET-Quellcode

    1. ' Füllt ListView1 mit Daten aus empfangenem Telegramm
    2. Public Sub IntoList(ByVal command As String)
    3. Try
    4. 'Ausgabe in Liste
    5. If Not Commands.Contains(command) Then
    6. Commands.Add(command)
    7. Dim L As New ListViewItem
    8. L.Text = Count_list
    9. L.SubItems.Add(DateTime.Now.ToString)
    10. L.SubItems.Add(command.Remove(0, 7))
    11. L.SubItems.Add(length)
    12. ListView1.Items.Add(L)
    13. Count_list = Count_list + 1
    14. End If
    15. Catch ex As Exception
    16. End Try
    17. End Sub

    Ich habe überflüssigen Code aus der Funktion mal entfernt.
    Wenn ich Schritt für Schritt im Debugger durchgehe tut er auch das, was er machen soll.
    Nur wo & wann genau rufe ich jetzt mein Listview in Form3 auf? Es soll nämlich nachdem ich meinen ersten Befehl eingetragen habe erscheinen und neue Befehle sollen zusätzlich eingetragen werden. Also sich nicht schließen, wenn ein neuer kommt, sondern sich einfach aktualisieren.

    Gruß

    TimeOut schrieb:

    VB.NET-Quellcode

    1. Form3.IntoList(txtRcvHData.Text)
    Siehe Post 3.
    Ist sichergestellt, dass der Code innerhalb der Form3 (mach da testweise mal einen Button rein) funktioniert :?:
    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!

    TimeOut schrieb:

    Willst du mir sagen, dass der Aufruf falsch ist?
    Form3.Irgendwas ist falsch, auch wenn der VB-Compiler nicht meckert (in C# geht sowas nicht).
    Siehe dazu hier.
    ------
    Ich habe mit Deinem Code eine Listview nicht befüllen können.
    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!
    Hmm das ist seltsam, bei mir funktioniert es ohne Probleme, die Liste mit dem Code zu befüllen (in der gleichen Form)

    Ich habe mir deinen Thread dazu mal durchgelesen und versucht auf meinen Code zu übertragen

    Also wenn ich meinen Button "Read Command" in Form2 drücke, schreibe ich in dessen Clickprozedur:

    VB.NET-Quellcode

    1. If frm3 Is Nothing OrElse frm3.IsDisposed Then
    2. frm3 = New Form3
    3. End If
    4. If Not frm3.Visible Then
    5. frm3.Show(Me)
    6. End If


    und zurvor in Form 2:

    VB.NET-Quellcode

    1. Private WithEvents frm3 As Form3


    Erstelle ich dann zuerst das leere Listview und fülle dann oder andersrum?

    Bzw wo übergebe ich genau die Parameter an die Liste und wo (und vor allem wie) rufe ich sie dann auf?
    Das ListView solltest Du im Designer machen.
    Der Rest kommt in jeweils eine separate Prozedur.
    Form2: Aufruf der Befüllung,
    Form3: die Befüllung selbst.
    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!