Listview zufälliges Item auswählen und Wert1 und Wert 2 abfragen!?

  • VB.NET

Es gibt 19 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Listview zufälliges Item auswählen und Wert1 und Wert 2 abfragen!?

    Hey leute,
    nach sehr langem suchen im Internet brauche ich echt eure Hilfe,
    Ich bin dabei einen Vokabeltrainer zu programmieren und das Problem wovor ich stehe
    ist einfach das ich nicht weiß Wie ich aus einer ListView item 0 oder item 1 per Random ausgeben kann und
    damit eben einen Vokabeltrainer zu erstellen.....



    **** Kurz Form ****
    Listview Item Auslesen und Wert 2 Abfragen!


    mfg Maasch
    hoffe ihr könnt mir helfen:)
    Das war n bisken sehr kurz, daher eine sehr kurze Antwort:
    - Zufallsgenerator (Klasse Random) nutzen
    - DeinListViewName.Items(IndexDesGewünschtenItems).SubItems(0).Text und .SubItems(1).Text führen zum Ziel, wobei 0 und 1 eben per o.g. Klasse wählbar sind.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Von Diesem Code würde ich gerne Item1 zufällig auswählen und dazu Item2 Also die Zweite Spalte Abfragen.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Vokabeln
    2. Private testfile As String = Application.StartupPath & "\Vokablenliste.txt"
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. TextBox1.Select()
    5. Dim sampleitem As New ListViewItem
    6. If TextBox1.Text = "" Then
    7. MsgBox("Bitte gib beide Wörter ein!", vbInformation, Title:="Information")
    8. ElseIf TextBox2.Text = "" Then
    9. MsgBox("Bitte gib beide Wörter ein!", vbInformation, Title:="Information")
    10. Else
    11. sampleitem.Text = TextBox1.Text
    12. sampleitem.SubItems.Add(TextBox2.Text)
    13. ListView1.Items.Add(sampleitem)
    14. TextBox1.Text = ""
    15. TextBox2.Text = ""
    16. End If
    17. Dim myWriter As New IO.StreamWriter(testfile)
    18. For Each myItem As ListViewItem In ListView1.Items
    19. myWriter.WriteLine(myItem.Text & "/" & myItem.SubItems(0).Text)
    20. Next
    21. myWriter.Close()
    22. End Sub
    23. Private Sub Vokabeln_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    24. ListView1.Items.Clear()
    25. Dim myCoolFileLines() As String = IO.File.ReadAllLines(testfile)
    26. For Each line As String In myCoolFileLines
    27. Dim lineArray() As String = line.Split("/")
    28. Dim newItem As New ListViewItem(lineArray(0))
    29. newItem.SubItems.Add(lineArray(1))
    30. ListView1.Items.Add(newItem)
    31. Next
    32. End Sub
    33. Private Sub TextBox2_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
    34. If e.KeyData = Keys.Enter Then Button1.Focus()
    35. End Sub
    36. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    37. Dim tmp As Integer
    38. tmp = Rnd() * ListView1.Items.Count - 1
    39. ListView1.Items(tmp).Selected = True
    40. ListView1.EnsureVisible(tmp)
    41. Label2.Text = tmp
    42. End Sub
    43. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    44. For Each item As ListViewItem In ListView1.SelectedItems
    45. ListView1.Items.Remove(item)
    46. Next
    47. End Sub
    48. Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged
    49. End Sub
    50. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    51. Me.Hide()
    52. Hauptmenu.Show()
    53. End Sub
    54. Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    55. Me.Close()
    56. Form1.Close()
    57. Hauptmenu.Close()
    58. Vokabelnabfragen.Close()
    59. End Sub
    60. End Class

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

    Maasch schrieb:

    Von Diesem Code
    ist vieles Option Strict Off und ausbaufähig, aber das ist ein anderes Thema. An welcher Stelle scheitert es Deines Wissen nach? Denn quasi alles zu posten, ist Reizüberflutung.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Es scheitert daran, das ich nicht weiß wie ich per Button click eine neue Form aufrufe wo ich in einem label eine zufällige Zeile der Listview aus der Form Vokabel ausgeben kann und per textbox überprüfen kann ob das Subitem zum Item passt.

    Form: Vokablen --> ClickButton ---> Form:Vokablen schliessen/ Form:VokablenAbfragen öffnen. <<<--- Das Bekomme ich hin.
    Form:Vokablen ListView Zufalls Zeile auswählen --> Form:VokablenAbfrage die Zufalls Zeile ausgeben im Label1 und Per Textbox in Prüfen ob Item2 aus der Gleichen Zeile ist!

    Beispiel:


    ListView (Form:Vokabeln)

    Deutsch Englisch
    Hallo Hello

    Form:(VokablenAbfragen)

    Label2 = (" Wie lautet die übersetzung zu:" & Deutscheswort)

    Textbox1.text = .......... <---- Wie kann ich den Subwert überprüfen ob er mit Deutscheswort in dem Fall "Hallo" übereinstimmt, (müsste ja Hello sein)?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Maasch“ ()

    Gib dem VokabelnAbfrage-Formular eine öffnetliche Methode (z.B. Initiate), die 2 Parameter hat:

    VB.NET-Quellcode

    1. Public Sub Initiate(CorrectGermanWord As String, CorrectEnglishWord As String)

    In dieser Prozedur gibst Du die Parameterwerte an 2 Variablen weiter. Diese können später ausgewertet werden (einfacher Vergleich).
    Der Aufruf im Hauptformular erfolgt dann (korrekt):

    VB.NET-Quellcode

    1. Using DlgVokabelAbfrage As New VokabelnAbfrage
    2. DlgVokabelAbfrage.Initiate(DasAusgewählteDeutscheWort, DasEntsprechendeEnglischeWort)
    3. DlgVokabelAbfrage.ShowDialog(Me)
    4. End Using

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    VokabelnAbfrage ist ja ein Formular. Und Vokabeln das Hauptformular. Und nun willst Du aus dem ersten Formular Zugriff auf das Hauptformular nehmen, richtig? Tricky. Es gibt mehrere Ansätze. Je besser, desto komplizierter. Die einfachste, aber auch unsauberste Variante wäre, wenn Du in VokabelnAbfrage Dir den direkten Zugriff auf Vokabeln.ListView nimmst:

    VB.NET-Quellcode

    1. 'wichtig: nur einmalig folgende Zeile im ganzen Code aufrufen:
    2. Dim Random As New Random
    3. 'später dann
    4. Dim x = Random.Next(Vokabeln.ListView.Items.Count)
    5. GermanCorrectWord = Vokabeln.ListView.Items(x).SubItems(0).Text
    6. EnglishCorrectWord = Vokabeln.ListView.Items(x).SubItems(1).Text


    Wie man es richtig/sauber machen würde, dazu einige Stichpunkte:
    - Datenhaltung und -zugriff über eine passende Datenstruktur, nicht über den Inhalt eines CEs
    - kein ListView, sondern ein DataGridView verwenden
    - SubForm greift nicht auf's Hauptform zu, sondern schickt per Event eine Anfrage und das Hauptform verarbeitet das Event
    - Daten in einem DataSet halten und diesen notfalls als Shared in einem Module halten, sodass alle Forms Zugriff drauf haben
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Super dickes Dankeschön um die Uhrzeit an Dich!!!!

    Meine Letze Frage, warum würd hier bei beiden Labels das gleiche ausgegeben?
    Ich Will das Label1 GermanCorrectWord ausgibt
    und Label2 EnglishCorrectWord ausgibt :(


    Jetzt gibt er mir leider nur wenn ich Deutsch Englisch in der Listview habe nur das Deutsche aus...


    VB.NET-Quellcode

    1. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    2. Dim x = Random.Next(Vokabeln.ListView1.Items.Count)
    3. Dim GermanCorrectWord As String
    4. Dim EnglishCorrectWord As String
    5. GermanCorrectWord = Vokabeln.ListView1.Items(x).SubItems(0).Text
    6. EnglishCorrectWord = Vokabeln.ListView1.Items(x).SubItems(1).Text
    7. Label3.Text = GermanCorrectWord
    8. Label4.Text = EnglishCorrectWord
    9. 'If GermanCorrectWord = Vokabeln.ListView1.Items(x).SubItems(1).Text Then
    10. ' MsgBox("Richtig")
    11. 'Else
    12. ' MsgBox("Falösch")
    13. 'End If
    14. End Sub

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

    Hm, kann ich leider nicht nachvollziehen. Hab es nachgebaut, bei mir läuft es. Dann mach mal bitte einen Screenshot Deines ListViews im laufenden Betrieb und poste das hier mittels [Erweiterte Antwort]. Ich kann mir nur vorstellen, dass im ListView ein Knoten drin ist. Denn der hiesige Code (wenn man von vielen Kleinigkeiten absieht) scheint nicht das Problem zu sein.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hier der Link zum Bild
    Hier der Code der Vokabel Form wo die ListView eingebaut ist:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Vokabeln
    2. Private testfile As String = Application.StartupPath & "\Vokablenliste.txt"
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. TextBox1.Select()
    5. Dim sampleitem As New ListViewItem
    6. If TextBox1.Text = "" Then
    7. MsgBox("Bitte gib beide Wörter ein!", vbInformation, Title:="Information")
    8. ElseIf TextBox2.Text = "" Then
    9. MsgBox("Bitte gib beide Wörter ein!", vbInformation, Title:="Information")
    10. Else
    11. sampleitem.Text = TextBox1.Text
    12. sampleitem.SubItems.Add(TextBox2.Text)
    13. ListView1.Items.Add(sampleitem)
    14. TextBox1.Text = ""
    15. TextBox2.Text = ""
    16. End If
    17. Dim myWriter As New IO.StreamWriter(testfile)
    18. For Each myItem As ListViewItem In ListView1.Items
    19. myWriter.WriteLine(myItem.Text & "/" & myItem.SubItems(1).Text)
    20. Next
    21. myWriter.Close()
    22. End Sub
    23. Private Sub Vokabeln_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    24. ListView1.Items.Clear()
    25. Dim myCoolFileLines() As String = IO.File.ReadAllLines(testfile)
    26. For Each line As String In myCoolFileLines
    27. Dim lineArray() As String = line.Split("/")
    28. Dim newItem As New ListViewItem(lineArray(0))
    29. newItem.SubItems.Add(lineArray(1))
    30. ListView1.Items.Add(newItem)
    31. Next
    32. End Sub
    33. Private Sub TextBox2_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox2.KeyDown
    34. If e.KeyData = Keys.Enter Then Button1.Focus()
    35. End Sub
    36. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    37. Me.Hide()
    38. Vokabelnabfragen.Show()
    39. End Sub
    40. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    41. For Each item As ListViewItem In ListView1.SelectedItems
    42. ListView1.Items.Remove(item)
    43. Next
    44. End Sub
    45. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    46. Me.Hide()
    47. Hauptmenu.Show()
    48. End Sub
    49. Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    50. Me.Close()
    51. Form1.Close()
    52. Hauptmenu.Close()
    53. Vokabelnabfragen.Close()
    54. End Sub
    55. End Class
    Bilder
    • Unbenannt.PNG

      17,48 kB, 497×627, 99 mal angesehen

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

    1. Wie gesagt: Das Forum bietet die Möglichkeit, selber Bilder hochzuladen. Picload oder ähnliches zu nutzen ist weder notwendig noch gern gesehen. Einfach statt auf [Antworten] eben auf [Erweiterte Antwort] klicken und unter der großen TextBox gibt es dann die Möglichkeit Bilder hochzuladen.
    2. Wenn im ListView in beiden Spalten schon deutsche Wörter drin stehen, kann der Code da nix mehr machen => die Voraussetzungen sind falsch. Bekommst Du es hin, dass im ListView in Spalte 1 deutsche und in Spalte 2 englische Wörter stehen?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Was genau bekommst Du nicht mit dem englischen Wort hin? Dass es richtig im ListView erscheint oder dass Du die Vokabelabfrage in dem Extraform nicht korrekt angezeigt bekommst? Kannst Du Dein Projekt mal zippen und hochladen? Denn der Code läuft als Nachbau bei mir. Abspeichern und erneut laden läuft. Und auch die Vokabelabfrage.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Es scheitert nicht an den Vokabeln, sondern mehr an der korrekten Auswertung/Datenverarbeitung. Zum (vermeintlichen) Abschluss dieses Threads hier eine funktionierende Klasse. Frag, wenn Du was nicht verstehst. Denn das hier komplett zu verstehen, wäre der Schritt in Weiterentwicklung.

    Im Hauptform (Vokabeln.vb):

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. Me.Hide()
    3. Vokabelnabfragen.PrepareNewWord() '<-- neu !
    4. Vokabelnabfragen.Show()
    5. End Sub


    In der Datei Vokabelnabfragen.vb (der hiesige ist Komplettersatz zum bestehenden Code):

    VB.NET-Quellcode

    1. Public Class Vokabelnabfragen
    2. Private testfile As String = Application.StartupPath & "\Vokablenliste.txt"
    3. Dim Random As New Random
    4. Dim GermanCorrectWord As String = ""
    5. Dim EnglishCorrectWord As String = ""
    6. Dim WordIndex As Integer = 0
    7. Public Sub PrepareNewWord()
    8. WordIndex = Random.Next(Vokabeln.ListView1.Items.Count)
    9. GermanCorrectWord = Vokabeln.ListView1.Items(WordIndex).SubItems(0).Text
    10. EnglishCorrectWord = Vokabeln.ListView1.Items(WordIndex).SubItems(1).Text
    11. Label1.Text = GermanCorrectWord
    12. End Sub
    13. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    14. If TextBox1.Text = EnglishCorrectWord Then
    15. MsgBox("Richtig")
    16. Else
    17. MsgBox("Falsch. Die vorgesehene Antwort wäre »" & EnglishCorrectWord & "« gewesen.")
    18. End If
    19. PrepareNewWord()
    20. End Sub
    21. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    22. Me.Hide()
    23. Vokabeln.Show()
    24. End Sub
    25. End Class

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Puh, schwierig. Bücher, Bücher, Bücher. Ergänzend das Forum bei konkreten Fragen. Ich bin da insofern kein guter Ansprechpartner, da ich mit dem Kram seit fast 30 Jahren beschäftigt bin. Ein Vorschlag: "Visual Basic 2005 - Das Entwicklerbuch" als Google-Suchbegriffe. Da sollten dann von Microsoft als PDF schnell die entsprechenden Bücher kommen. Zum kostenlosen Runterladen. Ergänzend das ganze mit 2008 und 2010, obwohl sich die nur in einzelnen, späteren Kapiteln groß voneinander unterscheiden. Das DVD-Cover-Erstell-Kapitel bietet eine Übersicht, wie man ein Programm quasi Schritt für Schritt entwickelt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    VaporiZed schrieb:

    Ein Vorschlag: "Visual Basic 2005 - Das Entwicklerbuch" als Google-Suchbegriffe. Da sollten dann von Microsoft als PDF schnell die entsprechenden Bücher kommen. Zum kostenlosen Runterladen. Ergänzend das ganze mit 2008 und 2010
    Da war meine Formulierung wohl nicht deutlich genug, da ich das damit meinte, daher auch der Vergleich im Nebensatz zwischen den Versionen. Vielen Dank für den Link.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.