IO.StreamWriter - In einer bestimmten Zeile eine bestimmte Sache ändern

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    IO.StreamWriter - In einer bestimmten Zeile eine bestimmte Sache ändern

    Hey Leute!
    Ich habe hier eine ListView. Wenn die Form mit der ListView startet, lese ich mit IO.File.ReadAllLines(...) eine Textdatei aus, deren Inhalt dann in der ListView angezeigt wird.

    Jetzt will ich den Text in Zeile 2 mit dem Inhalt "vb-Paradise" zu "irgendetwas" ändern und dabei alles andere unberührt lassen. Außerdem sollte dies nicht auf eine bestimmte Anzahl von Zeilen beschränkt sein - es soll also auch möglich sein den Inhalt in Zeile 15 etc. zu ändern.
    Ich weiß leider nicht wie ich dies verwirklichen kann! :/ Bitte helft mir. :D
    Moin,

    eine ListView hat eine Items-Property, also eine Collection, sodass Du einzelne Elemente/Items über Ihre Indizien ansprechen kannst.

    Edit: Es heißt eig. Indizes, da habe ich geschlampt, sorry.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

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

    Plural von Index (:P), Auflistungen kann man damit meist ansprechen, also Item1 hat den Index 0, Item2 den Index 1 usw.

    Grüße und ebenfalls frohe Weihnachten
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    VB.NET-Quellcode

    1. Form1.ListView1.Items(0).Text = TextBox1.Text '(oder "Mama")
    2. Form1.ListView1.EndUpdate()
    3. Form1.ListView1.Refresh()


    In der ListView wird mir trotzdem nur "Hallo" statt "Mama" angezeigt ;(
    Außerdem ist der Code wieder nur auf eine Zeile (nicht einmal auf eine Spalte) reduziert.

    Danke, LG
    Wahrscheinlich, weil Du eine Klasse wie ein Objekt behandelst, das ist aber VB6-Unsinn:
    Instanziierung von Forms und Aufruf von Dialogen - WinForms - VB ...

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Zum Ändern: (Form 2)

    VB.NET-Quellcode

    1. Private Sub NameÄndernToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NameÄndernToolStripMenuItem.Click
    2. If ToolStripTextBox1.Text = "" Then
    3. MessageBox.Show("Bitte geben Sie dem Bild einen Namen. Ein freies Feld ist nicht erlaubt.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    4. Else
    5. Select Case MsgBox("Sind Sie sicher, dass Sie den Namen des Bildes von " & Variablen.Name & " zu " & ToolStripTextBox1.Text & " ändern wollen?", MsgBoxStyle.YesNo, "Sind Sie sich sicher?")
    6. Case MsgBoxResult.Yes
    7. Try
    8. Form1.ListView1.Items(0).Text = Variablen.Name
    9. Form1.ListView1.EndUpdate()
    10. Form1.ListView1.Refresh()
    11. MessageBox.Show("Erfolgreich geändert!", "Erfolg", MessageBoxButtons.OK, MessageBoxIcon.Information)
    12. Catch ex As Exception
    13. MessageBox.Show("Etwas ist schief gelaufen!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    14. End Try
    15. End Select
    16. End If
    17. End Sub


    Hier zum Öffnen: (Form 1)

    VB.NET-Quellcode

    1. Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
    2. Try
    3. i = ListView1.SelectedItems(0)
    4. Catch ex As Exception
    5. End Try
    6. If PictureBox1.Cursor = Cursors.Hand Then
    7. Form2.Show()
    8. Form2.PictureBox1.Image = New System.Drawing.Bitmap(New IO.MemoryStream(New System.Net.WebClient().DownloadData(i.SubItems.Item(2).Text & i.SubItems.Item(3).Text)))
    9. Else
    10. End If
    11. End Sub


    DAs mit

    VB.NET-Quellcode

    1. ​If PictureBox1.Cursor = Cursors.Hand Then
    wird noch verfeinert! (:D - Bin spürbarer Anfänger, ich weiß :D)
    Da ist ja auch noch keine Instanz, also praktisch das Selbe wie vorher. ;)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Frei nach "Instanziierung von Forms und Aufruf von Dialogen" schrieb:

    .. weil Form1 der Name der Klasse, nicht aber der Name der Instanz ist.
    Also müssen wir mit New eine Instanz der Form1 erstellen.


    VB.NET-Quellcode

    1. Dim frm As New Form1 ' Instanz erstellen
    2. frm.Show() ' Aufrufen


    PS: Vermeide Umlaute im Code !

    Gesuchter schrieb:

    IO.File.ReadAllLines(...)
    Lies die Datei in ein String-Array, ersetze das betreffende Item in diesem Array, speichere das Array. Feddich.

    VB.NET-Quellcode

    1. Dim lines() = IO.File.ReadAllLines("PATH")
    2. If lines.Count > 3 Then
    3. lines(3) = "bla"
    4. End If
    5. IO.File.WriteAllLines("PATH", lines)
    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!
    @Gesuchter Warum willst Du da von außen drauf zugreifen? Sowas sollte man vermeiden.
    Du musst Dir dafür Events anlegen, indem Du eigene ​EventArgs erstellst und dann die Daten dort mitgibst. Dann kannst Du zwischen den Forms kommunizieren und das ändern.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Dürfen wir an der Lösung teilhaben?

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: