Problem bei Labelinhalt in Unterformular

  • VB.NET

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

    Problem bei Labelinhalt in Unterformular

    Hallo liebe Community :)

    Ich habe ein kleines Problem mit dem Label meines Unterformulars und finde einfach keine Lösung.

    Ich habe ein ziemlich großes Programm zur Datenverarbeitung, welches automatisch verschiedene Prozesse durchläuft.
    Damit man bei einer Laufzeit von 45 Minuten (oder mehr) kontrollieren kann ob das Programm irgendwo hängt (oder die SQL-Abfragen zu lange dauern)
    möchte ich eine Art Statusanzeige einbauen.
    Ich hatte da an ein Unterformular gedacht, welches sich öffnet, wenn der Datenverarbeitungsprozess beginnt.
    In einem Label auf diesem UF soll nun angezeigt werden in welchem Prozess sich das Programm befindet (bzw. was das Programm grade macht).
    (Später vielleicht noch mit Timer, oder ProgressBar)

    Nur irgendwie bleibt mein Label leer. Ich habe die Eigenschaft AutoSize auf False gesetzt. Das einzige was passiert ist, dass beim Programmlauf der Hintergrund des Labels weiß ist (Zumindest öffnet es sich).
    Manchmal zeigt es ein wenig Schrift am Anfang, aber die verschwindet wieder. Fast wie bei einem Anzeige, oder Ladefehler.

    Ich bin mit Unterformularen noch nicht besonders vertraut, traue mir also Fehler zu...

    VB.NET-Quellcode

    1. Public Class frmMain
    2. Dim prog As New frmProg
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. prog.Show()
    5. prog.lblProgress.Text = "Datei wird ausgelesen und formatiert."


    Hierzwischen befinden sich noch eine Menge Prozeduren...
    ...in denen ich den Labeltext hin und wieder ändere.

    VB.NET-Quellcode

    1. prog.Close()
    2. MsgBox("Datei wurde erfolgreich verarbeitet!")


    Muss ich das Hauptformular im Unterformular deklarieren? Was mache ich falsch? ?(
    Vielen Dank im Voraus.

    VB.NET-Quellcode

    1. Private Sub buttonDatenZeigen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles buttonDatenZeigen.Click


    Da steht es jetzt drin.
    Keine neuen Threads - hatte den Begriff bis eben auch noch nie gehört...
    Macht das denn Sinn, wenn das Programm einen linearen Lauf hat? Also alles nacheinander - und nichts gleichzeitig läuft?
    Was ist der Vorteil davon und hilft mir das vielleicht bei meinem Problem?
    Dann würde ich mich damit mal beschäftigen.
    Danke :)

    MayasEistee schrieb:

    Nur irgendwie bleibt mein Label leer
    Kann es sein, dass Du das ganze während einer großen Rechenaktion machst?
    Da hat die GUI ggf. keine Zeit, das Label zu aktualisieren, das musst Du "einfordern":
    prog.lblProgress.Update()
    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!
    @ThuCommix Threading und GUI? Da musst Du doch auch wieder in den MainThread invoken, da hab ich echt Probleme, die Anzeige zu synchronisieren.
    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:

    da hab ich echt Probleme, die Anzeige zu synchronisieren.


    Könntest du das genauer ausführen? Im Eventhandler kannst du ja einfach BeginInvoke verwenden. Schöner wäre es Progress<Of T> zu verwenden, dort kann man den SynchronizationContext der Form angeben und alles passiert automatisch. Der Prozess ruft Report(T) auf und der Dialog hat ProgressChanged aboniert und aktualisiert das Status Label.

    MayasEistee schrieb:

    bezüglich Threading mal schlau
    Klar.
    Im Thread rechnen und gelegentlich ein Ergebnis invoken. Gelegentlich, weil Du nicht jedes einzelne Ergebnis anzeigen musst, sondern nur z.B. jedes hundertste.
    @ThuCommix Das Problem ist, dass ich hier an meiner Maschine mit dem 2010er Studio nur bis FW4.0 komme und von den feinen späteren Sachen nur träumen kann. ;(
    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!