Fenster öffnet sich nicht

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

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

    Fenster öffnet sich nicht

    Hallo
    Ich habe eine App geschrieben, die ein Textfile anzeigt (wenn es vorhanden ist). wenn mehrere Textfiles vorhanden sind, sollen alle nacheinander angezeigt werden.
    Der code funktioniert soweit, nur werden die Files nicht im Fenster angezeigt. In der Messagebos funktioniert es.
    Kann mir jemand helfen?
    (Ich beschäftige mich erst seit ca. 1 Woche mit VB.Net)

    Besten Dank

    Peter
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Drawing.Text
    2. Imports System.Net
    3. Imports System.Reflection.Emit
    4. Imports System.Threading
    5. Public Class Form1
    6. Private GetEnvironment = Environment.GetEnvironmentVariable("LOCALAPPDATA") & "\" ' & "RemBody.txt"
    7. Private Zeitraum As String
    8. Private PfadSys As String
    9. Private StrParameter As String
    10. Private DatEnde As Date
    11. Private DatStart As Date
    12. Private StrPfad As String
    13. Private Sub FilesListen()
    14. ' Verzeichnis, dessen Dateien ermittelt werden sollen
    15. ' Dim sPath As String = Environment.GetEnvironmentVariable("LOCALAPPDATA")
    16. ' Directory-Object erstellen
    17. Dim oDir As New System.IO.DirectoryInfo(GetEnvironment)
    18. ' alle Dateien des Ordners
    19. ' Dim oFiles As System.IO.FileInfo() = oDir.GetFiles()
    20. ' nur TXT-Dateien ...
    21. Dim oFiles As System.IO.FileInfo() = oDir.GetFiles("*.txt")
    22. ' Datei-Array durchlaufen und in ListBox übertragen
    23. Dim oFile As System.IO.FileInfo
    24. For Each oFile In oFiles
    25. MessageBox.Show(oFile.Name)
    26. Select Case oFile.Name '** Auswahl
    27. Case = "1.txt"
    28. StrPfad = "1.txt"
    29. MessageBox.Show(GetEnvironment & StrPfad)
    30. SubAusführen()
    31. Case = "2.txt"
    32. StrPfad = "2.txt"
    33. MessageBox.Show(GetEnvironment & StrPfad)
    34. SubAusführen()
    35. Case = "3.txt"
    36. StrPfad = "3.txt"
    37. MessageBox.Show(GetEnvironment & StrPfad)
    38. SubAusführen()
    39. Case = "RemBody.txt"
    40. StrPfad = "RemBody.txt"
    41. MessageBox.Show(GetEnvironment & StrPfad)
    42. SubAusführen()
    43. Case Else
    44. MessageBox.Show("ELSE= " & GetEnvironment & StrPfad)
    45. Exit Sub
    46. End Select
    47. Next
    48. End Sub
    49. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    50. FilesListen()
    51. End Sub
    52. Private Function SubAusführen() As Boolean
    53. '** Nachricht aufteilen 0= Oberer Teil, 1= Unterer Teil
    54. Dim strNachricht() As String = Split(IO.File.ReadAllText(GetEnvironment & StrPfad, System.Text.Encoding.Default), "~") '** Aufteilen ab Trennzeichen und in Array (0-1)schreiben
    55. MessageBox.Show("Param= " & strNachricht(0)) '** Parameter OK
    56. MessageBox.Show("Param= " & strNachricht(1)) '** Text OK
    57. '** Nachricht ausgeben'
    58. TextBox1.Text = strNachricht(1) '!!!!!!!!!!!!!!! Funktioniert nicht
    59. Exit Sub'*################## zum Testen
    60. '************ Parameter der Meldung **************
    61. For Each Line As String In IO.File.ReadAllLines(GetEnvironment & StrPfad, System.Text.Encoding.Default) '** Auswahl der Parameter
    62. Select Case True
    63. Case Line.StartsWith("1§") '** Pfad
    64. PfadSys = Line.Substring(2)
    65. Case Line.StartsWith("2§") '** Parameter
    66. StrParameter = Line.Substring(2)
    67. Case Line.StartsWith("3§") '** Start-Datum
    68. DatStart = Line.Substring(2)
    69. Case Line.StartsWith("4§") '** End-Datum
    70. DatEnde = Line.Substring(2)
    71. End Select
    72. Next
    73. '********************** Start-Datum und Ende-Datum zuweisen *********************
    74. Zeitraum = "Diese Nachricht wurde am: (" & DatStart & ") erstellt und Endet am: (" & DatEnde & ")"
    75. If System.DateTime.Now.ToString("dd.MM.yyyy") > DatEnde Then '** Zeitraum berechnen (Datum Heute größer Datum Ende)
    76. My.Computer.Audio.Play(My.Resources.Control, AudioPlayMode.Background)
    77. Select Case MessageBox.Show("Die maximale Aufbewahrunsdauer der Nachricht vom:" &
    78. Microsoft.VisualBasic.ControlChars.CrLf _
    79. & "[" & DatStart & "] ist erreicht!" &
    80. Microsoft.VisualBasic.ControlChars.CrLf _
    81. & Microsoft.VisualBasic.ControlChars.CrLf _
    82. & "Soll die nachricht jetzt gelöscht werden?",
    83. "Erinnerung löschen" _
    84. & vbCrLf, MessageBoxButtons.OKCancel,
    85. MessageBoxIcon.Question,
    86. MessageBoxDefaultButton.Button2,
    87. MessageBoxOptions.DefaultDesktopOnly Or
    88. MessageBoxOptions.ServiceNotification)
    89. Case DialogResult.OK
    90. My.Computer.FileSystem.DeleteFile(GetEnvironment & StrPfad) '** Erinnerung Löschen **
    91. My.Computer.Audio.Play(My.Resources.Control, AudioPlayMode.Background)
    92. MessageBox.Show("Die Erinnerung wurde gelöscht.",
    93. "Erinnerung löschen",
    94. MessageBoxButtons.OK,
    95. MessageBoxIcon.Information,
    96. MessageBoxDefaultButton.Button1,
    97. MessageBoxOptions.DefaultDesktopOnly Or
    98. MessageBoxOptions.ServiceNotification)
    99. Case DialogResult.Cancel
    100. End
    101. End Select
    102. End '** Schließen
    103. End If
    104. '****************************************** Information der Meldung ********************************************
    105. ' ** WAVE-Datei aus Anwendungsressource abspielen
    106. My.Computer.Audio.Play(My.Resources.Calendar, AudioPlayMode.Background)
    107. Me.Text = Zeitraum '** In kopfzeile des Fensters schreiben
    108. '** Nachricht ausgeben
    109. TextBox1.Text = strNachricht(1) '** (1) ist der 2.Teil der Nachricht (Information)
    110. '***************************************************************************************************************
    111. End Function
    112. Private Sub Btn_OK_Click(sender As Object, e As EventArgs) Handles btn_OK.Click
    113. If My.Computer.FileSystem.FileExists(GetEnvironment & StrPfad) = True Then '** Wenn File existiert
    114. My.Computer.FileSystem.DeleteFile(GetEnvironment & StrPfad) '** Erinnerung Löschen **
    115. If My.Computer.FileSystem.FileExists(GetEnvironment & StrPfad) = True Then '** Wenn File noch existiert
    116. MessageBox.Show("Das File " & vbCrLf &
    117. GetEnvironment & StrPfad & vbCrLf &
    118. "konnte nicht gelöscht werden!" &
    119. Microsoft.VisualBasic.ControlChars.CrLf &
    120. "Löschen Sie es bitte von Hand" &
    121. Microsoft.VisualBasic.ControlChars.CrLf &
    122. "Sonst wird die Erinnerung bei jedem" &
    123. Microsoft.VisualBasic.ControlChars.CrLf &
    124. "Systen-Neustart angezeigt",
    125. "Erinnerung löschen",
    126. MessageBoxButtons.OK,
    127. MessageBoxIcon.Information)
    128. End If
    129. End '** Schließen
    130. End If
    131. End '** Schließen
    132. End Sub
    133. Private Sub Btn_Abbruch_Click(sender As Object, e As EventArgs) Handles btn_Abbruch.Click
    134. End '** Schließen
    135. End Sub
    136. Private Sub BtnÖffnen_Click(sender As Object, e As EventArgs) Handles BtnÖffnen.Click
    137. '**************** App mit Argumenten Öffnen ******************
    138. Dim pr As New Process
    139. pr.StartInfo.FileName = PfadSys
    140. pr.StartInfo.Arguments = StrParameter '*** Argumente angeben
    141. pr.Start()
    142. End
    143. End Sub
    144. End Class



    Thema verschoben; Das Thema wird automatisch dort erstellt, wo man sich befindet, wenn man auf [ Neues Thema] klickt.
    CodeTags gesetzt
    aufgrund des Datenumfangs Spoiler hinzugefügt
    ~VaporiZed

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

    Willkommen im Forum.

    Bevor Du weitermachst, bitte die empfohlenen VS-Einstellungen verwenden. Ich hab schon gelesen, dass Du erst seit einer Woche mit VB.NET arbeitest. Daher: Je früher Du die empfohlenen Einstellungen aktivierst, desto besser. Ganz oben auf der to-do-List: Option Strict On
    Für weitere Themen gleich: versuche das Problem für Dich und uns auf das Wesentliche zu reduzieren. Über 200 Zeilen, aber eigentlich geht es nur um einen sehr kleinen Abschnitt.
    Auch wären Ist- und Sollwerte, ggf. mit Screenshot sinnvoll. Ein funktioniert nicht ist zu unkonkret.
    Auch hantierst Du mit Daten, die uns nicht zur Verfügung stehen.
    Bilder und andere Anhänge (wie Beispieltextdateien) kannst Du forenintern über [+ Erweiterte Antwort] -> _|Dateianhänge|_ -> [Hochladen] posten.

    Letztenendes scheint es so zu sein, dass das Problem auf folgenden Teil reduziert werden kann:

    VB.NET-Quellcode

    1. Dim strNachricht() As String = Split(IO.File.ReadAllText(GetEnvironment & StrPfad, System.Text.Encoding.Default), "~") '** Aufteilen ab Trennzeichen und in Array (0-1)schreiben
    2. MessageBox.Show("Param= " & strNachricht(0)) '** Parameter OK
    3. MessageBox.Show("Param= " & strNachricht(1)) '** Text OK
    4. '** Nachricht ausgeben'
    5. TextBox1.Text = strNachricht(1) '!!!!!!!!!!!!!!! Funktioniert nicht

    Ich wandle mal ab zu:

    VB.NET-Quellcode

    1. Dim Nachrichtentext = "Teil1~Teil2"
    2. Dim Nachrichten = Nachrichtentext.Split("~"c)
    3. MessageBox.Show(Nachrichten(0))
    4. MessageBox.Show(Nachrichten(1))
    5. TextBox1.Text = Nachrichten(1)


    So, da können wir Leser uns schon schneller was drunter vorstellen. Der Ausgabecode an sich sollte klappen. Es liegt daher wahrscheinlich an den Daten - die wir nicht kennen. Vermutlich ist ein Zeilenumbruch oder ein anderen Steuerzeichen drin, welches eine Ausgabe in der MessageBox ermöglicht (da diese auch von Haus aus mehrzeilige Texte ausgibt), aber nicht in der normalen TextBox, da diese nicht auf MultiLine = True eingestellt ist. Aktivier mal den Mehrzeilenmodus der TextBox, mach sie im Designer größer und schau, was passiert. Oder gib mal eine vermeintlich nicht funktionierende Beispieldatei. Und, wie geschrieben, auch eine Beispieldatei, mit der es nicht klappt und ggf. Screenshots.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @Pewi55 Ebenfalls: Willkommen im Forum. :thumbup:
    Der Anfängerfehler schlechthin:
    Mein Code compiliert, wieso funktioniert er nicht?
    Ganz einfach:
    Weil jede einzelne Zeile Deines Codes so lange falsch ist, bis Du Dich davon überzeugt hast, dass sie genau das tut, was sie tun soll.
    Nach der Sicherstellung von Option Strict On lerne zu debuggen:
    Vergleiche das, was Dein Code tut, mit dem, was Dein Code tun soll.
    Verfolge dazu den Inhalt der relevanten Variablen.
    Debuggen, Fehler finden und beseitigen
    Und:
    Code, den Du von irgendwo her in Dein Programm kopierst, ist genau so falsch wie Dein eigener Code, bis Du Dich vom Gegenteil überzeugt hast.
    Das Problem dabei besteht darin, dass Du diesen Code zunächst verstehen musst, bevor Du ihn bewerten kannst.
    Um mit der Programmiersprache VB.NET warm zu werden, schaust Du vielleicht mal hier rein:
    [Sammelthread] Programmieren, aber was? (Programmideen)
    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!
    Hallo
    besten Dank für Deine schnelle Antwort.
    Option Strict On ist wirklich sehr hilfreich.

    Sorry dass ich den ganzen Code gepostet habe.
    Die Textfiles liegen im Ordner 'Local' und haben das Format:

    ######### Reminder von der APP 'Bewertungen' #########
    1§E:\Access\Access-Projekte\Bewertung\20.08.2023 Bewertung.accdb

    3§21.08.2023
    4§24.08.2023 ===>Parameter
    ~eeeeeeeeeeeeeee
    rrrrrrrrrrrrr

    ttttttttttttttttttt

    *** Ende ***

    Mit
    Dim Nachrichtentext = IO.File.ReadAllText(GetEnvironment & StrPfad, System.Text.Encoding.Default)
    Dim Nachrichten = Nachrichtentext.Split("~"c)
    MessageBox.Show(Nachrichten(0))
    MessageBox.Show(Nachrichten(1))
    TextBox1.Text = Nachrichten(1)

    Werden die einzelnen Teilstrings im der Messagebox angezeigt.
    Allerdings wird das Formularmit der Textbox1 nicht angezeigt.
    Das Form soll in jedem Durchlauf geöffnet und der zugehörige Text angzeigt werden. Nach scließen des Forms soll, wenn vorhanden, das nächste Textfile dargestellt werden.
    Das Form wird jedoch nur am Ende des Codes geöffnet.

    Besten Dank

    Peter
    Ich habe jetzt als Dateiinhalt das hier (bitte CodeTags verwenden!, siehe Link am Ende von Post#1)

    Quellcode

    1. ######### Reminder von der APP 'Bewertungen' #########
    2. 1§E:\Access\Access-Projekte\Bewertung\20.08.2023 Bewertung.accdb
    3. 3§21.08.2023
    4. 4§24.08.2023 ===>Parameter
    5. ~eeeeeeeeeeeeeee
    6. rrrrrrrrrrrrr
    7. ttttttttttttttttttt
    8. *** Ende ***


    Und der Code aus Post#1 ergibt mir dann ein entsprechendes Ergebnis für die Ausgabe von strNachricht(1). TextBox1 oben links ist SingleLine, TextBox2 unten ist MultiLine.

    Von daher: so what?

    ##########

    Pewi55 schrieb:

    Allerdings wird das Formularmit der Textbox1 nicht angezeigt.
    Waswie? Moment. Es geht darum, dass das Formular nicht angezeigt wird? Ist das das Programm-Hauptformular oder ein Unterformular? Wenn letzteres: Dann wird es wohl am Aufrufcode für das Unterformular liegen. Wie rufst Du das auf? Wie lautet der Code?
    Bilder
    • Result.png

      1,62 kB, 277×304, 21 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    Pewi55 schrieb:

    Allerdings wird das Formularmit der Textbox1 nicht angezeigt.
    Setze auf die Stelle, wo Du Textbox1 befüllst, einen Haltepunkt und überzeuge Dich davon, dass das, was da stehen soll, auch steht.
    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!

    Pewi55 schrieb:

    Das Form soll in jedem Durchlauf geöffnet und der zugehörige Text angzeigt werden. Nach scließen des Forms soll, wenn vorhanden, das nächste Textfile dargestellt werden.
    Das Form wird jedoch nur am Ende des Codes geöffnet.


    Probier mal myForm.ShowDialog() zu verwenden, statt myFrm.Show()
    Hallo
    Ich mußte das Form mit Me.Visible= False unsichtbar machen, sonst konnte ich es nicht kompilieren.

    Die Textfile werden jetzt abgearbeitet und angezeigt.
    Der Aufruf und die Zuweisung der Sub erfolgt über ein Select Case.

    Allerdings bleibt das form nicht, bis ich es von Hand schließe, geöffnet, sondern wird sofort von der nächsten Case-Anweisung überschrieben.
    (Das Form wartet nicht auf schließen von Hand)
    Wie kann ich das ändern?

    Besten Dank

    Pewi55 schrieb:

    Wie kann ich das ändern?
    Solange wir nicht wissen, wie Du es bisher ganz konkret machst, können wir nicht sagen, was geändert werden muss. Deshalb nochmal die Frage:

    VaporiZed schrieb:

    Wie rufst Du das [Unterformular alias Form1] auf? Wie lautet [Dein] Code?


    Pewi55 schrieb:

    Ich mußte das Form mit Me.Visible= False unsichtbar machen, sonst konnte ich es nicht kompilieren.
    Es kompiliert nicht, wenn es sichtbar ist? Mit welcher Fehlermeldung kompiliert es denn ganz konkret nicht. Bitte genauen Wortlaut und/oder Screenshot.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Pewi55 schrieb:

    sonst konnte ich es nicht kompilieren.
    Das ist keine gute Fehlerbeschreibung.
    Wenn ein Programm nicht compiliert, gibt es eine fehlerhafte Code-Zeile und eine präzise Fehlerbeschreibung.
    Poste bitte beides.
    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!