textbox lesen abhängig vom numericupdownvalue kärzer schreiben

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

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Visual_Prog.

    textbox lesen abhängig vom numericupdownvalue kärzer schreiben

    hallo,

    abhänging vom wert eines numericupdown values wird in drei textboxen inee txt gelesen. habe das folgendermaßen formuliert

    ich wolltem al fragn ob jemand einen weg mit weniger code kennt.

    VB.NET-Quellcode

    1. If NumericUpDown1.Value = 0 Then
    2. ' try weil die txt datei nicht immer existier
    3. Try ' NUD auf 0
    4. Karteikarte_1.Text = System.IO.File.ReadAllText(pfad & ".txt")
    5. Catch ex As Exception
    6. Karteikarte_1.Text = ""
    7. End Try
    8. Try
    9. Karteikarte_2.Text = System.IO.File.ReadAllText(pfad & "_(2)" & ".txt")
    10. Catch ex As Exception
    11. Karteikarte_2.Text = ""
    12. End Try
    13. Try
    14. Karteikarte_3.Text = System.IO.File.ReadAllText(pfad & "_(3)" & ".txt")
    15. Catch ex As Exception
    16. Karteikarte_3.Text = ""
    17. End Try
    18. ElseIf NumericUpDown1.Value = 1 Then ' NUD auf 1
    19. ' try weil die txt datei nicht immer existiert (txt zu den bildern).tb1
    20. Try
    21. Karteikarte_1.Text = System.IO.File.ReadAllText(pfad & "_(4)" & ".txt")
    22. Catch ex As Exception
    23. Karteikarte_1.Text = ""
    24. End Try
    25. Try
    26. Karteikarte_2.Text = System.IO.File.ReadAllText(pfad & "_(5)" & ".txt")
    27. Catch ex As Exception
    28. Karteikarte_2.Text = ""
    29. End Try
    30. Try
    31. Karteikarte_3.Text = System.IO.File.ReadAllText(pfad & "_(6)" & ".txt")
    32. Catch ex As Exception
    33. Karteikarte_3.Text = ""
    34. End Try
    35. ElseIf NumericUpDown1.Value = 2 Then ' NUD auf 2
    36. ' try weil die txt datei nicht immer existiert (txt zu den bildern).tb1
    37. Try
    38. Karteikarte_1.Text = System.IO.File.ReadAllText(pfad & "_(7)" & ".txt")
    39. Catch ex As Exception
    40. Karteikarte_1.Text = ""
    41. End Try
    42. Try
    43. Karteikarte_2.Text = System.IO.File.ReadAllText(pfad & "_(8)" & ".txt")
    44. Catch ex As Exception
    45. Karteikarte_2.Text = ""
    46. End Try
    47. Try
    48. Karteikarte_3.Text = System.IO.File.ReadAllText(pfad & "_(9)" & ".txt")
    49. Catch ex As Exception
    50. Karteikarte_3.Text = ""
    51. End Try
    52. End If




    lg

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

    So gehts:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Public Class frmWhatsToRead
    3. Private _BasePath As String = Path.GetFullPath("..\..\TextFile")
    4. Private _FileNames As String() = " _(2) _(3) _(4) _(5) _(6) _(7) _(8) _(9)".Split.Select(Function(s) s & ".txt").ToArray
    5. Private _Controls As Control()
    6. Public Sub New()
    7. InitializeComponent()
    8. _Controls = {Karteikarte_1, Karteikarte_2, Karteikarte_3}
    9. End Sub
    10. Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged
    11. Dim i = CInt(NumericUpDown1.Value) * 3
    12. If i < 0 OrElse i >= _FileNames.Length Then
    13. MessageBox.Show("invalid Nud-Value")
    14. Return
    15. End If
    16. For ii = 0 To _Controls.Length - 1
    17. _Controls(ii).Text = File.ReadAllText(_BasePath & _FileNames(i + ii))
    18. Next
    19. End Sub
    20. End Class
    Ich habe die Dateinamen in ein Array getan - _Filenames(), und die Controls auch.
    IN der Schleife wird jedem Control ein Filename zugeordnet - vorher mit dem Basispfad kombiniert.

    Kein TryCatch!
    Lässt sich eine der Dateien nicht laden, soll die Exception kommen.
    Denn dann hat das Prog einen Fehler, der behoben werden soll, anstatt den User mit einer Messagebox allein zu lassen.
    Es können zig verschiedene Fehler auftreten - nicht nur, dass die Datei fehlt.
    TryCatch ist ein heißes Eisen
    Dateien

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

    edit:
    @ Visual_Prog
    Die Testanwendung funktioniert einwandfrei.
    In welcher Zeile tritt der Fehler auf ?

    ErfinderDesRades schrieb:

    Lässt sich eine der Dateien nicht laden, soll die Exception kommen.
    Denn dann hat das Prog einen Fehler, der behoben werden soll, anstatt den User mit einer Messagebox allein zu lassen.
    Es können zig verschiedene Fehler auftreten - nicht nur, dass die Datei fehlt.

    Manchmal ist es aber sinnvoll, dem Anwender eine Möglichkeit zu geben, zu reagieren.
    Also z.B., wenn eine config Datei nicht existiert, beschädigt ist, oder Leserechte Fehlen.
    Wenn eine Date fehlt, kann man z.B. eine FileOpenDialog anbieten, oder fragen ob eine Standarddatei erzeugt werden soll.
    Dafür ist File.Exist() doch da.
    Ich finde eine gezielte Verwendung, auch von Try Catch ist durchaus angesagt und im Idealfall bekommt der Anwender nie eine, nicht extra für ihn aufbereite, Fehlermeldung.

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

    ok vielen dank das ersparrt mir unheimlich arbeit.

    frage: wie kann man die textboxen leeren, wenn die zugehörige datei nicht existiert? manchmal bleiben halt alte geladene texte in der texbox hängen, ich würde die textboxen leeren, wenn es keine zughörige datei gibt.
    bezieht sich vor allem auf dieses ereignis:

    VB.NET-Quellcode

    1. Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged
    2. _BasePath = combinedpath2 & TB_Thema.Text & "_" & TB_Eingabe1.Text
    3. Dim i = CInt(NumericUpDown1.Value) * 4
    4. If i < 0 OrElse i >= _FileNames.Length Then
    5. MessageBox.Show("invalid Nud-Value")
    6. Return
    7. End If
    8. For ii = 0 To _Controls.Length - 1
    9. Try
    10. _Controls(ii).Text = File.ReadAllText(_BasePath & _FileNames(i + ii))
    11. Catch ex As Exception
    12. End Try
    13. Next
    14. End Sub

    Visual_Prog schrieb:

    wie kann man die textboxen leeren, wenn die zugehörige datei nicht existiert?
    Du checkst die Existenz der Datei. Wenn sie nicht vorhanden ist, löschst Du die Textbox und verlässt die Prozedur:

    VB.NET-Quellcode

    1. If Not DATEI.Exists Then
    2. TextBox1.Clear()
    3. Return
    4. End If
    5. ' weiter im Text

    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!
    @ Pasta. der Fehler hat sich zum Glueck geklärt. ich hatte einen pfad definiert, der von textboxen abhängig war. das konnte dann beim Formload natürlich nichtum gesetzt werden...

    nochmal wegen den textboxen löschen... ich habe halt jetzt 4 karteikarten mit insgesamt 100 möglchen filenames....
    kann man das evtl in den code einbauen? weil ich könnte das mit file.exists einbauen aber dann muss ich das doch mega oft schreiben oder nicht?!

    hier nochmal der aktuelle code. vielen dank soweit für die hilfe mit dem thema. es fehlt eigentlich nur noch das.

    VB.NET-Quellcode

    1. Private _BasePath As String
    2. Private _FileNames As String() = " _(2) _(3) _(4) _(5) _(6) _(7) _(8) _(9) _(10) _(11) _(12) _(13) _(14) _(15) _(16) _(17) _(18) _(19) _(20) _(21) _(22) _(23) _(24) _(25) _(26) _(27) _(28) _(29) _(30) _(31) _(32) _(33) _(34) _(35) _(36) _(37) _(38) _(39) _(40) _(41) _(42) _(43) _(44) _(45) _(46) _(47) _(48) _(49) _(50) _(51) _(52) _(53) _(54) _(55) _(56) _(57) _(58) _(59) _(60) _(61) _(62) _(63) _(64) _(65) _(66) _(67) _(68) _(69) _(70) _(71) _(72) _(73) _(74) _(75) _(76) _(77) _(78) _(79) _(80) _(81) _(82) _(83) _(84) _(85) _(86) _(87) _(88) _(89) _(90) _(91) _(92) _(93) _(94) _(95) _(96) _(97) _(98) _(99) _(100)".Split.Select(Function(s) s & ".txt").ToArray
    3. Private _Controls As Control()
    4. Public Sub New()
    5. InitializeComponent()
    6. _Controls = {Karteikarte1, Karteikarte2, Karteikarte3, Karteikarte4}
    7. End Sub
    8. Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged
    9. _BasePath = combinedpath2 & TB_Thema.Text & "_" & TB_Eingabe1.Text
    10. Dim i = CInt(NumericUpDown1.Value) * 4
    11. If i < 0 OrElse i >= _FileNames.Length Then
    12. MessageBox.Show("invalid Nud-Value")
    13. Return
    14. End If
    15. For ii = 0 To _Controls.Length - 1
    16. _Controls(ii).Text = File.ReadAllText(_BasePath & _FileNames(i + ii))
    17. Next
    18. End Sub

    @Visual_Prog Überzeuge Dich davon, dass Dein Array _FileNames das enthält, was Du glaubst dass es enthält.
    Besser wäre da ne For-Schleife.
    Wenn Dein NUD als Minimum Null hat, brauchst Du den Fall < 0 nicht abzutesten. Wenn Du das Maximum auf den entsprechenden Wert setzt, brauchst Du auch die obere Grenze nicht zu testen.
    Gib dem Array, das Deine "Karteikarten" enthält, den korrekten Typ.
    Mega-oft musst Du nix schreiben, wenn Du eine entsprechende Boolean Prozedur machst, der Du den Index übergibst.
    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!

    Pasta schrieb:

    Ich finde eine gezielte Verwendung, auch von Try Catch ist durchaus angesagt und im Idealfall bekommt der Anwender nie eine, nicht extra für ihn aufbereite, Fehlermeldung.
    Indem du das sagst (wobei völlig offen ist, was "gezielt" ist), ermutigst du ihn, wieder solche Super-Gurken hinzuhauen, und zu meinen, er täte damit Zeit sparen:

    Visual_Prog schrieb:

    VB.NET-Quellcode

    1. Try
    2. _Controls(ii).Text = File.ReadAllText(_BasePath & _FileNames(i + ii))
    3. Catch ex As Exception
    4. End Try
    Das Gegenteil ist der Fall - diese Gurke kostet immens Zeit.
    Wie gesagt: Königsweg ist so zu programmieren, dass absehbare Exceptions garnet erst auftreten. (Dann treten allenfalls noch unabsehbare Exceptions auf, und die sollen das Prog beenden, weil es eben nicht richtig funktioniert)
    Falls eine der Dateien nicht existiert, sollte die entsprechende Auswahlmöglichkeit von vornherein erstmal garnet präsentiert werden.
    (Dafür ist die Auswahl per NUD natürlich ziemlich problematisch)

    Aber das muss man im Gesamtzusammenhang der Anwendung sehen, also was sind das für Dateien, wie kann es zustandekommen, dass Dateien fehlen, kann auf diese Dateien verzichtet werden, kann ein User diesen Fehler (dass Dateien fehlen) korrigieren, ... ?

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

    @EDR
    ja also es handelt sich um txt datien, die in vier verschiedene textboxen geladen werden.
    Dann ist meinetwegen das NUD bei 0 und es werden vier txts dann auch geladen und dann (wo auch mein problem ist)
    wird das nud auf 1 geswitch, aber auf "ebene 1" sind meinetwegen nur drei von vier txt dateien beschrieben.

    somit bleibt in der vierten textbox noch der text haengen, der zur ebene nud 0 noch gehört.
    da soll dann im idealfall einfach die vierte textbox bei nud1 hal nichts zeigen, weil die ja nicht da ist.

    Visual_Prog schrieb:

    weil die ja nicht da ist.
    Dann musst Du bei der Feststellung, dass keine Datei da ist, die Textbox halt löschen.
    Wenn Du im NUD-Changed-Event zunächst alle Textboxen löschst, musst Du bei Datei nicht vorhanden einfach nur nichts tun.
    :thumbsup:
    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!