Hi zusammen,
dies ist mein erster Post in diesem Forum.
(Also bitte ich ein bisschen um Nachsicht - ich werde mir "Wie poste ich richtig?" schnellstmöglich zu Gemüte führen...)
Mein Problem wurde zwar schon ein paar mal diskutiert, doch leider konnte ich keine passende Antwort finden...
Umgebung:
Bei dem Programm handelt es sich um einen Zeiterfassungsclient, dessen ganze UI-Logik in mehrere UserControls gekapselt ist. Es besteht nur aus einem Form, das permanent im Vordergrund ist und den Focus haben muss...
(Die Station auf der das Programm läuft ist nur dafür zuständig. Sonst wird nichts daran gemacht...)
Ab und zu passiert es das dieses Form den Focus verliert. (Evtl. durch das Zeitabgleichs-Tool das im Hintergrund läuft...)
Wie kann ich das nun verhindern, bzw. behandeln?
Folgendes habe ich bereits gemacht:
TopMost der Form ist true.
Und bei Form_Deactivate setze ich wieder Form.Activate().
Das funktioniert aber nicht.
Aber:
Setze ich nun auf Form.Activate() einen BreakPoint, wird dem Form nach F5 wieder der Focus zugewiesen. (???)
Ich habe vor Form.Activate() mal testweise einen Thread.Sleep(500) eingefügt - bringt aber auch nichts...
Habe ich da etwas grundlegendes übersehen?
Kann das überhaupt funktionieren?
Vielen Dank...
Matchbox1980
Visual Studio 2008 Standard
.Net Framework 2.0
Ich glaube 100%ig sicher geht das (nahezu) gar nicht.
Du könntest einen Timer hernehmen und regelmäßig prüfen, ob das Foreground Window
auch deins ist:
GetForegroundWindow
SetForegroundWindow
Erreicht man das nicht mit SetForegroundWindow() aus der user32.dll?
Nicht ganz!
Schau dir auch mal dazu AttachThreadInput.
Denn eine Anwendung kann nur den Fokus erhalten, wenn Sie auch z.B. die Tastatur besitzt.
Hallo Matchbox1980,
hier noch zwei Blogeinträge zum Thema:*User32's SetForegroundWindow() API in C# *Why don’t Focus() and SetForegroundWindow() work?
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Vielen Dank euch allen!!
(Ist ja Hammer wie schnell das geht...)
Gleich der erste Tip hat funktioniert!
In Form_Deactivate starte ich jetzt einen Timer. (1sec)
Beim Tick setze ich Form.Activate() und stoppe den Timer.
That's it...
Danke...
Matchbox1980
P.S.: Kann ich das Thema selbst als "gelöst" oder so kennzeichnen?
Visual Studio 2008 Standard
.Net Framework 2.0
Hallo Matchbox1980,
Kann ich das Thema selbst als "gelöst" oder so kennzeichnen?
du kannst den Titel des ersten Beitrags abändern und ein [gelöst] voranstellen.
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg