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.

    Die wird euch nicht gefallen, aber: (Das meiste/alles stammt von euch - Danke.)

    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. Dim lines() = IO.File.ReadAllLines(Liste)
    9. Dim i As ListViewItem
    10. i = Form1.ListView1.SelectedItems(0)
    11. If lines.Count > 1 Then
    12. lines(1) = ToolStripTextBox1.Text & "~" & i.SubItems.Item(1).Text & "~" & i.SubItems.Item(2).Text & "~" & i.SubItems.Item(3).Text
    13. End If
    14. IO.File.WriteAllLines(Liste, lines)
    15. Dim frm As New Form1
    16. frm.Show()
    17. Form1.Close()
    18. Me.Close()
    19. MessageBox.Show("Erfolgreich geändert!", "Erfolg", MessageBoxButtons.OK, MessageBoxIcon.Information)
    20. Catch ex As Exception
    21. MessageBox.Show("Etwas ist schief gelaufen!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    22. End Try
    23. End Select
    24. End If
    25. End Sub


    Ist zwar noch nicht ganz das was ich haben wollte (das mit der festgelegten Anzahl an Lines), aber tzd vielen Dank.
    Hm, aber immer noch keine Instanz, denn eine Klasse ist kein Objekt und das ist nicht gut, da es u. a. fehleranfälliger ist bzw. in bestimmten Fällen nicht geht. Zudem missachtest Du dann den Sinn von objektorientierter Programmierung und hast immer eine Default-Instanz. Im Tutorial, das ich anfangs verlinkt habe, ist das erklärt. Bitte tue mir und anderen und Dir selbst den Gefallen und ändere das. Das sage ich, weil heute bzw. gestern schon mal jemand energisch dagegen war und einfach eine falsche Lösung verwendet hat. Aber wenigstens instanziierst Du schon mal Form1, das ist gut. Nur eben das ​Form1.ListView1.SelectedItems(0) ist ungut, zumal Du zusätzlich von außen auf eig. private Controls zugreifst, was man nicht tun sollte.
    Außerdem mischst Du MessageBox.Show und MsgBox, was Du vermeiden solltest. Nimm' immer MessageBox.Show, das ist .NET-konform. Da bekommst Du halt ein ​DialogResult zurück.

    Die Exceptions solltest Du zudem genauer behandeln und immer den StackTrace mit ausgeben, sonst verschluckst Du einfach alles und fertig.

    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 :!:

    Gesuchter schrieb:

    alles stammt von euch
    Das nicht:

    Gesuchter schrieb:

    i = Form1.ListView1.SelectedItems(0)

    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!
    ... Indizes. Der Facepalm-Smiley ist übrigens imo unnötig, sowas kann man auch freundlich ausdrücken, wenn jemand mal aus Unachtsamkeit etwas falsch(es) schreibt. Du kannst das ja gerne verbessern, musst aber nicht noch unnötig drauf rumreiten, oder?

    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“ ()

    Ui ui ui,

    RodFromGermany schrieb:

    Das nicht:

    Gesuchter schrieb:

    i = Form1.ListView1.SelectedItems(0)

    Gugst Du hier.

    Leider weiß ich nicht worauf Du/Ihr hinaus willst/wollt, es mag dumm klingen, ist aber leider so.
    Ich kenne keine andere Methode den Text von der ListBox "aufzufangen".

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

    Naja ich mache das *meistens * so, dass ich in der Form, welche ich instanziere(also Form2) eine Public-Variable habe(meistens ne Objekt), der ich dann beim Instanzieren beispielsweise die Instanz von Form1 übergeben kann. So zum Beispiel:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public Sub LoadForm2()
    3. Dim frm as new Form2
    4. frm.pa = Me
    5. frm.Show
    6. End Sub
    7. 'blabla
    8. End Class
    9. Public Class Form2
    10. Public pa as Form1
    11. 'dann das andere Zeugs
    12. End Class

    Das ist eine Variante. Das kann man auch auf anderen Wegen lösen, aber das will ich nicht aufzählen. Du kannst dann auf die Listbox von der richtigen Instanz zugreifen(also pa) und dann wird das auch in dieser geändert. Einfach "Form1" zu schreiben greift nicht auf eine Instanz zu, sondern auf die Klasse, was zwar (dummerweise) manchmal geht, aber häufiger nicht geht.

    LG
    Hatte doch gesagt, was Du machen musst, mit Events arbeiten. Schaue Dir das Tutorial nochmal an, da steht das.

    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 :!:
    Insofern der Dialog offen bleibt und er kommunizieren möchte, braucht er Events. ;) Aber sehe grade, dass er es danach schließt, dann ist das nat. nicht zwingend notwendig.

    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 :!:

    Gesuchter schrieb:

    Leider weiß ich nicht worauf Du/Ihr hinaus willst/wollt,
    Was ganz genau ist Form1 in Deinem Snippet?
    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!
    Das meinte er nicht. ;) Rod wollte damit ausdrücken, dass Form1 der Name der Klasse, nicht aber der einer Objektinstanz ist.
    Folglich ist das nicht richtig.

    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 :!:

    Gesuchter schrieb:

    Form1 ist
    Versuche zunächst diesen Thread zu verstehen.
    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!