Laden...

Mausclicks im Form abfangen

Erstellt von christof.k vor 18 Jahren Letzter Beitrag vor 18 Jahren 1.657 Views
C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 18 Jahren
Mausclicks im Form abfangen

Hallo!

Ich möchte gerne mein Form sperren, wenn ich einen Thread gestartet habe und nur einen Button freischalten, den der Benutzer drücken kann (zum abbrechen).

Ich dachte mir nun, dies folgendermaßen zu tun:

Alle Maus-Click Events abfangen und wenn der Thread läuft, nur diese Zulassen/Weitergeben, welche auf den einen Button zielen.

Erstes Problem ist, dass der Click-Event nur auf der leeren Form-Fläche weitergegeben wird und nicht, wenn ich z.B. auf ein Edit-Feld drücke.

Hat jemand eine Idee, wie ich mein Ziel am elegantesten erreiche?

Vielen Dank
Christof

2.082 Beiträge seit 2005
vor 18 Jahren

Hallo christof.k,

mach einen foreach-loop durch this.Controls und hänge eine eigene Funktion an den Control.Click-Event. So hast du deine Funktion auch auf Buttons, Textboxen usw.

Zu der Thread-Sache: In der Event-Funktion einfach

if(myThread != null && myThread.IsAlive)

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

564 Beiträge seit 2006
vor 18 Jahren

Hi!

Warum machst du es so kompliziert,
Liste erstellender Weg ist doch ganz einfach 🙂
Sowas habe ich folgendermaßen gelöst: Wenn der Thread gestartet wird, setzt du bei allen Controls, mit denen der Benutzer nicht mehr interagieren soll, Control.Enabled = false!
Nun gibt es 2 Möglichkeiten:

  1. Den bis jetzt deaktivierten Abbrechen-Button setzt du aktiv, fertig.
  2. Der OK-Button wird zum Abbrechen Button, in dem Fall:1.Button-Text ändern 1.bisherige OK-Methode beim Click-Event des Buttons disabonnieren 1.neue Abbrechen-Methode beim Click-Event des Buttons abonnieren

*wenn Thread beendet wird, Ausgangszustand wiederherstellen

Interaktionen zwischen den Threads kannst du gut über eigene Events realisieren.

Viel Erfolg! 🙂

Der Marcel

:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]

C
christof.k Themenstarter:in
159 Beiträge seit 2005
vor 18 Jahren

Hi!

Ich wollte nicht manuell alle Controls per Enabled ausschalten, da es viel Arbeit ist (OK, es sind nur 20, aber immerhin). Ich dachte so ein zentraler Mechanismus erspart mir die Arbeit und ist wartungsarm, da ich mich nicht um Änderung in den Controls kümmern muss (wenn welche Wegfallen oder hinzukommen)...

Dieses iterieren durch alle Controls muss ich mir mal anschauen. Klingt nach dem, was dem entgegen kommt...

Vielen Dank schonmal
Christof

2.082 Beiträge seit 2005
vor 18 Jahren

Wieso viel aufwand?

Entweder du machst einen foreach durch this.Controls oder Benutzt eine GroupBox oder einen Panel und setzt diesen dann auf enabled = false

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

564 Beiträge seit 2006
vor 18 Jahren

Hi christof.k!

Original von christof.k
Alle Maus-Click Events abfangen und wenn der Thread läuft, nur diese Zulassen/Weitergeben, welche auf den einen Button zielen.

Das ist viel Aufwand 😉

der Marcel

:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]

R
265 Beiträge seit 2005
vor 18 Jahren

Ich weiß es nicht genau, aber was ist wenn du deine Buttons in ein Panel packst und das dann auf Enabled = false setzt, voraus gesetzt es sind immer die selben Buttons die gesperrt werden müssen.
Bis Dann
Markus