Listbox Eintrag bearbeiten

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Schlammy.

    Listbox Eintrag bearbeiten

    hallo Leute wollte ein Tool machen um aus einer bestimmten Datei Einträge mit einem bestimmten wert zu ändern. Ich filtere mir die items mit regex und bearbeite diese mit replace . Doch sobald ich dieses item ändern möchte, macht er einfach ein neues item

    siehe anhang

    Testtext
    Spoiler anzeigen

    <object id="object (Beach1_LAs0fg) (1)" interior="0" collisions="true" alpha="255" doublesided="false" model="4842" scale="1" dimension="0" posX="-421.09961" posY="538.7998" posZ="46" rotX="0" rotY="0" rotZ="0"></object>
    <object id="object (Beach1_LAs0fg) (5)" interior="0" collisions="true" alpha="255" doublesided="false" model="4842" scale="1" dimension="0" posX="-548" posY="747.59998" posZ="45.9" rotX="0" rotY="0" rotZ="297.746"></object>
    <object id="object (Beach1_LAs04) (1)" interior="0" collisions="true" alpha="255" doublesided="false" model="4844" scale="1" dimension="0" posX="-538.20001" posY="820.59998" posZ="44.3" rotX="0" rotY="0" rotZ="252"></object>
    <object id="object (Beach1_LAs04) (2)" interior="0" collisions="true" alpha="255" doublesided="false" model="4844" scale="1" dimension="0" posX="-483.89999" posY="981.09998" posZ="44.4" rotX="0" rotY="0" rotZ="257.999"></object>
    <object id="object (Beach1_LAs04) (3)" interior="0" collisions="true" alpha="255" doublesided="false" model="4844" scale="1" dimension="0" posX="-445.60001" posY="1144.09998" posZ="44.3" rotX="0" rotY="0" rotZ="265.997"></object>


    Mein Quellcode:
    pastebin.com/P3H6m8qZ

    Problem bei z. 79 | 83
    Bilder
    • problem.png

      168,79 kB, 1.648×500, 119 mal angesehen
    Mach eine List(Of String), pack dort Deine Daten rein und häng diese als DataBinding an Deine Listbox.
    So geht es erst mal mit einem Gewalt-Update:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private myList As New List(Of String)
    3. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    4. myList.Add("gg")
    5. myList.Add("cc")
    6. myList.Add("tt")
    7. Me.ListBox1.DataSource = myList
    8. End Sub
    9. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    10. myList(2) = "bla"
    11. Me.ListBox1.DataSource = Nothing
    12. Me.ListBox1.DataSource = myList
    13. End Sub
    14. End Class
    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!
    Gib Deinem Projekt zunächst Option Strict On.
    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!
    OK, ich bin über diese Zeile gestolpert:

    VB.NET-Quellcode

    1. Dim myTextList = mytext.Split(CChar(vbNewLine))
    Was ist mit diesem 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!

    Schlammy schrieb:

    Damit möchte ich einen zeilenumbruch nehmen
    Dann mach doch gleich ReadAllLines().
    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!

    VB.NET-Quellcode

    1. If t.ShowDialog = vbOK Then
    2. Dim pfad As String = t.FileName
    3. 'Dim mytext As String = My.Computer.FileSystem.ReadAllText(pfad)
    4. 'Dim myTextList = mytext.Split(CChar(vbNewLine))
    5. Dim myTextList = IO.File.ReadAllLines(pfad)
    6. For Each line In myTextList
    7. 'ListBox1.Items.Add(line)
    8. 'ListBox2.Items.Add(line)
    9. myList.Add(line)
    10. Next
    11. Me.ListBox1.DataSource = myList
    12. End If


    geändert doch das wird meinem Problem sicher nicht weiterhelfen ^^

    EDIT
    Artentus

    Danke es funkt
    Weil wenn der Code so lang ist, mache ich lieber pastebin als alles vollzuspammen ^^




    Sry wegen doppelport muss aber den Thread wieder öffnen.

    Neuer Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Net
    3. Imports System.IO
    4. Imports System.Text.RegularExpressions
    5. Imports System.Text
    6. Imports System.Web
    7. Imports System
    8. Public Class Form1
    9. Private meinRegex As New Regex(".*?model=""(.*?)"".*?posZ=""(.*?)"".*?></object>", RegexOptions.Multiline)
    10. Dim curStatus As String = "-"
    11. Dim integerwert As Integer = 0
    12. Private myList As New List(Of String)
    13. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    14. ListBox1.Items.Clear()
    15. Dim t As New OpenFileDialog
    16. If t.ShowDialog = vbOK Then
    17. Dim pfad As String = t.FileName
    18. 'Dim mytext As String = My.Computer.FileSystem.ReadAllText(pfad)
    19. 'Dim myTextList = mytext.Split(CChar(vbNewLine))
    20. Dim myTextList = IO.File.ReadAllLines(pfad)
    21. For Each line In myTextList
    22. 'ListBox1.Items.Add(line)
    23. 'ListBox2.Items.Add(line)
    24. myList.Add(line)
    25. Next
    26. Me.ListBox1.DataSource = myList
    27. End If
    28. End Sub
    29. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    30. RadioButton2.Select()
    31. Control.CheckForIllegalCrossThreadCalls = False
    32. End Sub
    33. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    34. Try
    35. Dim ntext As Integer = CInt(TextBox1.Text)
    36. Try
    37. integerwert = CInt(TextBox2.Text)
    38. Catch ex2 As Exception
    39. Return
    40. End Try
    41. Catch ex As Exception
    42. Return
    43. End Try
    44. If RadioButton1.Checked = True Then
    45. curStatus = "+"
    46. Else
    47. curStatus = "-"
    48. End If
    49. Dim it As New Threading.Thread(AddressOf startFishing)
    50. it.Start()
    51. End Sub
    52. Public Sub startFishing()
    53. Dim groups1 As GroupCollection
    54. ListBox2.Items.Clear()
    55. For i As Integer = 0 To (myList.Count - 1)
    56. Me.ListBox1.DataSource = Nothing
    57. ProgressBar1.Maximum = (myList.Count - 1)
    58. ProgressBar1.Value = i
    59. Dim item As String = myList.Item(i)
    60. ' Hier abfragen
    61. Dim MC1 As MatchCollection = meinRegex.Matches(CStr(item))
    62. If MC1.Count > 0 Then
    63. For Each items As Match In MC1
    64. groups1 = items.Groups
    65. Dim sell As Integer = groups1.Count()
    66. If (groups1.Item(1).Value()) = TextBox1.Text Then
    67. Dim curDIm As Integer = CInt(groups1.Item(2).Value())
    68. If curStatus = "-" Then
    69. Dim newvalue As Integer = (curDIm - integerwert)
    70. 'ListBox2.Items.RemoveAt(mydex)
    71. 'ListBox2.Items.Add(groups1.Item(0).Value.Replace("dimension=""" & curDIm & """", "dimension=""" & newvalue & """"))
    72. myList(i) = groups1.Item(0).Value.Replace(" posZ=""" & curDIm & """", " posZ=""" & newvalue & """")
    73. 'myList.RemoveAt(i)
    74. 'myList.Add(groups1.Item(0).Value.Replace(" posZ=""" & curDIm & """", " posZ=""" & newvalue & """"))
    75. ListBox2.Items.Add(groups1.Item(0).Value.Replace(" posZ=""" & curDIm & """", " posZ=""" & newvalue & """"))
    76. 'Threading.Thread.Sleep(250)
    77. Else
    78. Dim newvalue As Integer = (curDIm + integerwert)
    79. 'ListBox2.Items.RemoveAt(mydex)
    80. 'myList.RemoveAt(i)
    81. 'myList.Add(groups1.Item(0).Value.Replace(" posZ=""" & curDIm & """", " posZ=""" & newvalue & """"))
    82. ListBox2.Items.Add(groups1.Item(0).Value.Replace(" posZ=""" & curDIm & """", " posZ=""" & newvalue & """"))
    83. myList(i) = groups1.Item(0).Value.Replace(" posZ=""" & curDIm & """", " posZ=""" & newvalue & """")
    84. 'ListBox2.Items.Add(groups1.Item(0).Value.Replace("dimension=""" & curDIm & """", "dimension=""" & newvalue & """"))
    85. 'Threading.Thread.Sleep(250)
    86. End If
    87. End If
    88. Next
    89. End If
    90. Next
    91. Me.ListBox1.DataSource = myList
    92. ProgressBar1.Value = 0
    93. End Sub
    94. Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    95. 'Try
    96. ' TextBox3.Text = ListBox1.SelectedItem.ToString
    97. 'Catch ex As Exception
    98. 'End Try
    99. End Sub
    100. Private Sub ListBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox2.SelectedIndexChanged
    101. Try
    102. TextBox3.Text = ListBox2.SelectedItem.ToString
    103. Catch ex As Exception
    104. End Try
    105. End Sub
    106. End Class


    die listbox2 ist nur für debug zwecke

    Er ersetzt nur machn mal die zahl die meisten bleiben so wie sie waren was mache ich falsch?

    Edit by hal2000:
    - Expander eingefügt.
    - Doppelpost zusammengefügt.

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

    Setz einen Haltepunkt rein und überzeuge Dich vom ordnungsgemäßen Programmablauf.
    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!

    RodFromGermany schrieb:

    VB.NET-Quellcode

    1. Me.ListBox1.DataSource = Nothing
    2. Me.ListBox1.DataSource = myList
    Deswegen erst Nothing und danach auf den Wert :!:
    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!

    VB.NET-Quellcode

    1. If MC1.Count > 0 Then
    2. For Each items As Match In MC1
    3. groups1 = items.Groups
    4. Dim sell As Integer = groups1.Count()
    5. If (groups1.Item(1).Value()) = TextBox1.Text Then
    6. Dim curDIm As Integer = CInt(groups1.Item(2).Value())
    7. Me.ListBox1.DataSource = Nothing
    8. Me.ListBox1.DataSource = myList
    9. If curStatus = "-" Then
    10. Dim newvalue As Integer = (curDIm - integerwert)
    11. 'ListBox2.Items.RemoveAt(mydex)
    12. 'ListBox2.Items.Add(groups1.Item(0).Value.Replace("dimension=""" & curDIm & """", "dimension=""" & newvalue & """"))
    13. myList(i) = groups1.Item(0).Value.Replace("posZ=""" & curDIm.ToString & """", "posZ=""" & newvalue.ToString & """")
    14. 'myList.RemoveAt(i)
    15. 'myList.Add(groups1.Item(0).Value.Replace(" posZ=""" & curDIm & """", " posZ=""" & newvalue & """"))
    16. ListBox2.Items.Add(groups1.Item(0).Value.Replace("posZ=""" & curDIm.ToString & """", "posZ=""" & newvalue.ToString & """"))
    17. 'Threading.Thread.Sleep(250)
    18. Else
    19. Dim newvalue As Integer = (curDIm + integerwert)
    20. 'ListBox2.Items.RemoveAt(mydex)
    21. 'myList.RemoveAt(i)
    22. 'myList.Add(groups1.Item(0).Value.Replace(" posZ=""" & curDIm & """", " posZ=""" & newvalue & """"))
    23. ListBox2.Items.Add(groups1.Item(0).Value.Replace("posZ=""" & curDIm.ToString & """", "posZ=""" & newvalue.ToString & """"))
    24. myList(i) = groups1.Item(0).Value.Replace("posZ=""" & curDIm.ToString & """", "posZ=""" & newvalue.ToString & """")
    25. 'ListBox2.Items.Add(groups1.Item(0).Value.Replace("dimension=""" & curDIm & """", "dimension=""" & newvalue & """"))
    26. 'Threading.Thread.Sleep(250)
    27. End If
    28. End If
    29. Next
    30. End If


    So? (z. 8/9)