Laden...

[gelöst] Meine Form verliert den Focus --> Diesen wieder zuweisen

Erstellt von Matchbox1980 vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.543 Views
M
Matchbox1980 Themenstarter:in
5 Beiträge seit 2010
vor 14 Jahren
[gelöst] Meine Form verliert den Focus --> Diesen wieder zuweisen

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

Gelöschter Account
vor 14 Jahren

versuch das mal mit einem timer anstatt dem thread.sleep

215 Beiträge seit 2004
vor 14 Jahren

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

M
234 Beiträge seit 2007
vor 14 Jahren

Erreicht man das nicht mit SetForegroundWindow() aus der user32.dll?

N
45 Beiträge seit 2006
vor 14 Jahren

Nicht ganz!

Schau dir auch mal dazu AttachThreadInput.

Denn eine Anwendung kann nur den Fokus erhalten, wenn Sie auch z.B. die Tastatur besitzt.

1.002 Beiträge seit 2007
vor 14 Jahren

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

M
Matchbox1980 Themenstarter:in
5 Beiträge seit 2010
vor 14 Jahren

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

1.002 Beiträge seit 2007
vor 14 Jahren

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