Listbox überprüfen

  • VB.NET

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

    Listbox überprüfen

    Hi,

    Wie kann ich die ListBox alles überprüfen lassen?

    Quellcode

    1. If TextBox3.Text = "/kick " & ListBox1.Items.ToString Then
    2. MsgBox("Du besitzt keine Admin-Rechte! Probier dies bitte nicht nochmal!", MsgBoxStyle.Information)
    3. streamw.WriteLine("!!!")
    4. streamw.Flush()
    5. Else
    6. streamw.WriteLine(TextBox3.Text)
    7. streamw.Flush()
    8. TextBox3.Clear()
    9. End If

    Also, das ich die komplette listbox auf einen Benutzernamen scannen kann, und fals der name exestiert, wird das kicken gesperrt. Fals nicht, wird alles weitergefürt...
    Brauch da help ;(

    mfg
    ui thx

    Edit:// geht nicht. .Text ist kein member von string

    Quellcode

    1. For Each itm As String In ListBox1.Items
    2. If TextBox3.Text = "/kick " & itm.Text Then
    3. MsgBox("Du besitzt keine Admin-Rechte! Probier dies bitte nicht nochmal!", MsgBoxStyle.Information)
    4. streamw.WriteLine("!!!")
    5. streamw.Flush()
    6. Else
    7. streamw.WriteLine(TextBox3.Text)
    8. streamw.Flush()
    9. TextBox3.Clear()
    10. End If
    11. Next


    wo liegt der fehler?
    hat gefunzt, bis ich meine Admin-rechte-Warnung verändert hab...

    Fehler:
    Die Liste, an die der Enumerator gebunden ist, wurde geändert. Ein Enumerator kann nur verwendet werden, wenn die Liste nicht geändert wird.

    Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. For Each itm As String In ListBox1.Items
    3. If TextBox3.Text = "/kick " & itm Then
    4. MsgBox("Du besitzt keine Admin-Rechte! Probier dies bitte nicht nochmal!", MsgBoxStyle.Information)
    5. streamw.Close()
    6. streamr.Close()
    7. stream.Close()
    8. Me.Close()
    9. Form1.Show()
    10. Else
    11. streamw.WriteLine(TextBox3.Text)
    12. streamw.Flush()
    13. TextBox3.Clear()
    14. End If
    15. Next
    16. End Sub


    Gibt es einen ausweg oder eine andere möglichkeit?

    mfg
    Hi
    Vermutlich ist das nicht der ganze Code oder ich habe etwas überlesen. For-Each basiert auf der Enumeration, die von Items gebildet werden kann (implementiert IEnumerable). Wenn die Liste geändert wird, kann der Enumerator die Items nicht mehr so auflisten, wie sie vorher waren, da er sich den Speicher nicht extra dafür reserviert. Wenn du nun die Items der ListBox veränderst, führt das dazu, dass der Enumerator einen Fehler auslöst, sobald MoveNext() aufgerufen wird (hier das Next der For-Each-Schleife), da seine Items geändert wurden.

    Und ich plädiere für Option Strict On! Das ist ja grausam!

    Gruß
    ~blaze~
    Open Strikt on? Hab kein plan was das ist...

    Der Komplette Code...:

    Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.IO
    3. Public Class Form3
    4. Private stream As NetworkStream
    5. Private streamw As StreamWriter
    6. Private streamr As StreamReader
    7. Private client As New TcpClient
    8. Private t As New Threading.Thread(AddressOf Listen)
    9. Private Delegate Sub DAddItem(ByVal s As String)
    10. Private Sub AddItem(ByVal s As String)
    11. Dim userlist As String()
    12. If s.StartsWith("/u ") Then
    13. userlist = s.Remove(0, 3).Split(",")
    14. ListBox1.Items.Clear()
    15. ListBox1.Items.AddRange(userlist)
    16. ElseIf s.StartsWith("/kick " & TextBox2.Text) Then
    17. stream.Close()
    18. streamw.Close()
    19. streamr.Close()
    20. client.Close()
    21. Button1.Show()
    22. Button3.Hide()
    23. TextBox2.ReadOnly = False
    24. TextBox1.ReadOnly = False
    25. RichTextBox1.Text = "DU WURDEST GEKICKT!"
    26. MsgBox("DU WURDEST GEKICKT", MsgBoxStyle.Exclamation)
    27. Else
    28. Form1.RichTextBox1.Text = RichTextBox1.Text & s & vbCrLf
    29. RichTextBox1.Text = RichTextBox1.Text & s & vbCrLf
    30. End If
    31. End Sub
    32. Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    33. Form1.RichTextBox1.Visible = True
    34. Button1.Hide()
    35. Label3.Text = "."
    36. Button3.Show()
    37. TextBox2.ReadOnly = True
    38. TextBox1.ReadOnly = True
    39. Try
    40. client.Connect(TextBox1.Text, 8000)
    41. If client.Connected Then
    42. stream = client.GetStream
    43. streamw = New StreamWriter(stream)
    44. streamr = New StreamReader(stream)
    45. streamw.WriteLine(TextBox2.Text)
    46. streamw.Flush()
    47. t.Start()
    48. Else
    49. MessageBox.Show("Verbindung zum Server nicht möglich / wurde getrennt!")
    50. End If
    51. Catch ex As Exception
    52. MessageBox.Show("Verbindung zum Server nicht möglich / wurde getrennt!")
    53. End Try
    54. End Sub
    55. Private Sub Listen()
    56. While client.Connected
    57. Try
    58. Me.Invoke(New DAddItem(AddressOf AddItem), streamr.ReadLine)
    59. Catch
    60. MessageBox.Show("Verbindung zum Server nicht möglich / wurde getrennt!")
    61. End Try
    62. End While
    63. End Sub
    64. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    65. For Each itm As String In ListBox1.Items
    66. If TextBox3.Text = "/kick " & itm Then
    67. MsgBox("Du besitzt keine Admin-Rechte! Probier dies bitte nicht nochmal!", MsgBoxStyle.Information)
    68. streamw.Close()
    69. streamr.Close()
    70. stream.Close()
    71. Me.Close()
    72. Form1.Show()
    73. Else
    74. streamw.WriteLine(TextBox3.Text)
    75. streamw.Flush()
    76. TextBox3.Clear()
    77. End If
    78. Next
    79. End Sub
    80. Private Sub Form3_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
    81. If Label3.Text = "." Then
    82. Form1.RichTextBox1.Visible = False
    83. stream.Close()
    84. streamw.Close()
    85. streamr.Close()
    86. TextBox2.ReadOnly = False
    87. TextBox1.ReadOnly = False
    88. Form1.Show()
    89. Else
    90. Form1.RichTextBox1.Visible = False
    91. Form1.Show()
    92. End If
    93. End Sub
    94. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    95. If Label3.Text = "." Then
    96. stream.Close()
    97. streamw.Close()
    98. streamr.Close()
    99. Button1.Show()
    100. Button3.Hide()
    101. TextBox2.ReadOnly = False
    102. TextBox1.ReadOnly = False
    103. Else
    104. End If
    105. End Sub
    106. Private Sub LinkLabel1_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked
    107. Process.Start("http://multitips.de/index.php?page=Thread&postID=306#post306")
    108. End Sub
    109. End Class


    Es ist der TCP/IP-Multichat-code, den ich in meinem Browser einbauen will...

    mfg

    gfcwfzkm schrieb:

    Open Strikt on? Hab kein plan was das ist...

    Das wusst' ich schon.

    Zum Problem wird hier vermutlich der Thread. Lustig ist auch, dass man genau sieht, welcher Code von dir ist und welcher vermutlich nicht (MessageBox und MsgBox). In Zeile 15 und 16 wird die ListBox vom Thread verändert. Die Synchronisation mit Button2_Click kann damit nicht funktionieren, da ein ständiges Löschen und Hinzufügen stattfindet. Entweder du wartest, bis das Löschen und Hinzufügen geschehen ist oder du schaltest eine Boolean-Abfrage zwischen, die jedes mal überprüft wird. Naja, wobei ich eher sagen würde, dass du den Code teilweise in die Tonne treten kannst. Mach das Hinzufügen und Ändern der Items der ListBox über die entfernten bzw. hinzugefügten Teilnehmer und nicht mit vollständiger Löschung und wieder vollständiger Hinzufügung.

    Ach ja: Für VB-Code sind die vb-Tags da, nicht der code-Tag!

    Gruß
    ~blaze~
    Du startest mittendrin (Zeile 52) einen Thread (deklariert in Zeile 8), der in Zeile 65 die Additem-Methode aufruft, und damit deine Items-Collection verändert. Dies führt zu der Fehlermeldung (...Enumeration...), die du oben gepostet hast.
    Das wirst du schon selbst rausfinden müssen.

    Hier gibts Hilfestellung zu Problemen, keine kompletten Sourcecodes.
    Schau dir am besten mal die Grundlagen an. ;)
    hmm... :S

    Edit://

    Ha, es geht leichter. Mit ne try-box :P

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