Hilfe: WindowsForm aktualisieren!

  • VB.NET

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

    Hilfe: WindowsForm aktualisieren!

    Hallo,

    ich habe folgendes Problem, ich habe eine WindowsForm-Application erstellt, welche bestimmte Elemente in einer CAD-Anwendung erzeugt. Das funktioniert auch einwandfrei. Auf der WindowsForm befindet sich jedoch ein Abbrechen Button, um das Programm vorzeitig beenden zu können.
    Mein Problem ist nun das sich die WindowsForm während der Programmablaufes nicht aktualisiert und so nicht auf den Buttpn geklickt werden kann, geschweige denn, das er immer sichtbar ist.

    Gibt es eine Möglichkeit die Form zu aktualisieren, sodass der Button nutzbar ist?

    Habe schon im Forum geschaut und entdeckt das man mit dem Befehl My.Application.DoEvents() dies Problem verhindern kann.

    Ich habe jedoch keine Schleife in der dieser Befehlt aufgerufen werden kann. Habe dann weiter versucht dies mittels eines Timers zu realisieren, leider ohne Erfolg.

    Vielen Dank für Eure Hilfe!

    VB.NET-Quellcode

    1. Private Sub NeuePositionFlaechen_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Me.Show()
    3. Me.Update()
    4. Timer1.Interval = 100
    5. Timer1.Start()
    6. main()
    7. Me.Close()
    8. End Sub
    9. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    10. Me.Update()
    11. My.Application.DoEvents()
    12. End Sub
    Meines Wissens, sollte es per Invalidate() gehen. Das ganze bewirkt dass das Formular neu gezeichnet wird. Ich bin mir zwar nicht sicher ob das dass ist was du suchst, aber es könnte dir helfen.

    lg.
    lg.

    LucaWelker
    Je nachdem wo du das Forumlar aktualisieren/neu zeichnen möchtest.
    Funktionieren sollte das ganze, wenn mich nicht alles täuscht, entweder einfach per "Invalidate()" oder per Me.Invalidate().

    lg.
    lg.

    LucaWelker
    Dank für deine Antwort!
    Ich hatte wie oben beschrieben vor das ganze mit Hilfe eines Timers zu realisieren, so das der Befehl z.B. alle 0,1s ausgeführt wird.

    Bei mir im Test tut sich jedoch nichts, die WindowsForm bleibt unverändert. Unabhängig von Me.Invalidate() oder Invalidate()


    VB.NET-Quellcode

    1. Private Sub NeuePositionFlaechen_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Me.Show()
    3. Me.Update()
    4. Timer1.Interval = 100
    5. Timer1.Start()
    6. main()
    7. Me.Close()
    8. End Sub
    9. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    10. Me.Update()
    11. Me.Invalidate()
    12. End Sub
    Dank für deine Antwort.
    Ja nach dem die Sub-Prozedur main() ausgeführt wurde ist das Programm fertig und die Form kann geschlossen werden.

    Gruß

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

    Hi habe das ganze jetzt mit einem Backgroundworker gelöst:

    Die Hauptprozedur lasse ich nun in dem Backgroundworker ablaufen und einen Timer im "normalen" Thread. Der Timer ruft dann alle 100ms My.Application.DoEvents() auf, sodass voll auf alle Steuerelemente der Form zugegriffen werden kann.

    Gruß tobiley