Forums Neueste Beiträge
 

Focus-Wechsel innerhalb einer Form abfragen

19/02/2008 - 09:17 von Anton Reinthaler | Report spam
Hi, NG

Kann man irgendwie feststellen, ob gerade ein anderes Control als das eben
noch aktive den Focus erhalten hat?
Ich meine damit, ob es eine zentrale Stelle gibt, um das festzustellen. Etwa
ein Form-Ereignis, auf das ich reagieren kann, wenn ein Control zum aktiven
wird.
Oder muß ich da wirklich für jedes der unzàhligen Controls das
GotFocus-Ereignis aufrufen?
Ich fürchte fast.

Viele Grüße
Anton Reinthaler
 

Lesen sie die antworten

#1 Peter Götz
19/02/2008 - 10:25 | Warnen spam
Hallo Anton,

Kann man irgendwie feststellen, ob gerade ein anderes
Control als das eben noch aktive den Focus erhalten hat?



Ja man kann.
Die Ereignisprozedur Control_Enter() wird ausgelöst, wenn
das Control den Focus erhàlt.
Die Ereignisprozedur Control_Leave() wird ausgelöst, wenn
sie ihn verliert.

Ich meine damit, ob es eine zentrale Stelle gibt, um das
festzustellen.



Diese Stelle gibt es so nicht, aber Du kannt sie mit
wenig Code selbst erzeugen.

Etwa ein Form-Ereignis, auf das ich reagieren kann,
wenn ein Control zum aktiven wird.
Oder muß ich da wirklich für jedes der unzàhligen
Controls das GotFocus-Ereignis aufrufen?



Statt GotFocus nimm besser Enter.
Du kannst für alle Deine Controls auf der Form eine
einzige Enter-Prozedur verwenden.

Ich fürchte fast.



Deine Befürchtung ist unbegründet.
Kleines Beispiel:


' /// Code in Deiner Form, mit den "unzàhligen" Controls.
Public Class Form1
Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

Dim C As Control
For Each C In Me.Controls
AddHandler C.Enter, _
AddressOf Control_Enter

AddHandler C.Leave, _
AddressOf Control_Leave
Next
End Sub

Private Sub Control_Enter _
(ByVal sender As Object, _
ByVal e As System.EventArgs)

Dim C As Control = _
DirectCast(sender, Control)

Console.WriteLine(C.Name & "_Enter")
End Sub

Private Sub Control_Leave _
(ByVal sender As Object, _
ByVal e As System.EventArgs)

Dim C As Control = _
DirectCast(sender, Control)

Console.WriteLine(C.Name & "_Leave")
End Sub
End Class
' \\\ E N T E

Und schon hast Du jeweils ein zentrales Ereignis für Enter
und eines für Leave für alle auf Deiner Form befindlichen
Controls.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen