Mai 17, 2021, 00:07:45

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


"HAT Focus" als bedingte Formatierung eines Textfeldes

Begonnen von Matthias_001, April 03, 2021, 21:54:42

⏪ vorheriges - nächstes ⏩

Matthias_001

Hallo nocheinmal,

ich denke mein jetziges Problem ist eher simpel zu lösen, aber auch daran grübele ich schon einen Moment:

Die bedingte Formatierung von Textfeldern bzgl. "hat Focus" ist wirklich klasse und schnell für eine Vielzahl von Feldern realisiert.
Ich habe nun 2 Formulare auf einem Bildschirm auf.
Bei Wechsel des Focus auf das 2. Formular wird dieser Focusverlust von der bedingten Formatierung leider nicht erkannt, das ist ärgerlich und sicher mit ein Kniff zu lösen?!
Im Konkreten gebe ich den Feldern mit dem Focus eine andere Hintergrundfarbe, damit schnell erkannt wird wo der Focus ist. Bei 2 Formularen ist das nun soo nicht mehr offensichtlich.
Ich habe auch Anderes Probiert - zum Beispiel Funktionen die bei Focuserhalt und Focusverlust des einzelnen Textfeldes agieren - aber das bringt auch Nachteile und macht viel mehr Arbeit.
Also, auch wenn es fast schon eher akademischer Anspruch als zwingend notwendig ist:
Habt Ihr eine Idee?!

andyfau

Hallo,
 ein- und ausschalten geht einfacher über die Ereignisprozeduren im Eigenschaftenfenster des Textfeldes:
bei Fokuserhalt und bei Fokusverlust:

Private Sub Text1_GotFocus()
 Me.Text1.BackColor = vbGreen
End Sub
 
Private Sub Text1_LostFocus()
  Me.Text1.BackColor = vbWhite
End Sub


Matthias_001

Hallo,

nunja, es gibt schon ein paar verschiedene Wege die nach Rom führen.
Dein Vorschlag ist einfach und vor allem überschaubar, auch lassen sich weitere Aktionen verknüpfen.
Aber es macht u.U. auch viel Arbeit das für jedes Textfeld zu machen.
Ich habe es mit Public Funktion gelöst... aber das ist eigentlich auch gar nicht das Problem.

Mein "Problem" stellt sich nach weiterem testen und konkreter wie folgt da:
Gehe ich mittels TAB oder per Mausklick in ein Feld wird
- der Focuserhalt erkannt
- der Focusverlust erkannt wenn ich in ein anderes Formular wechsele
- und der Focuswiedererhalt erkannt wenn ich ins ursprüngliche Formular zurück wechsle

Stelle ich den Focus mit VBA (und nicht per TAB oder Mausklick) auf ein Feld wird auch auf diesem Weg
- (zunächst) der Focuserhalt erkannt
- beim wechsel in ein anderes Formular hingegeben wird der Focusverlust nicht erkannt
- auch der Widererhalt des Focus beim zurückkehren ins ursprüngliche Formular wird nicht erkannt.
Das trifft im Übrigen nicht nur auf das Ereigniss Focuserhalt und Focusverlust zu sondern auch auf die Ereignisse "hingehen" und "weggehen".
Die Ereignisse werden im 2.beschriebenen Fall einfach nicht ausgelöst...

Das ist dann wirklich komisch oder gibt es dafür einen Grund?!

Matthias_001

... hab es gelöst, bin aber trotdem an einer "Erklärung" interessiert.

Lösung:
Bevor ich per VBA den Focus auf das andere Formular schiebe, gebe ich dem aktuellen Formular nochmals expliziet den Focus, also:
Forms!Form_alt.SetFocus
Forms!Form_neu.SetFocus
... damit klappt es, warum auch immer.

andyfau

Hallo,

ich kenne jetzt den Code nicht, den Du nutzt, aber es wäre sicher interessant sich im Direktfenster zu verschiedenen Zeitpunkten das gerade aktive Formular anzuschauen.

?screen.ActiveForm.Name
Ggf. muss dann ein Steuerelement dann nicht mit Me.Steuerelementname sondern vollqualifizert mit Forms.Formularname.Steuerlementname referenziert werden.