Wunderschönen Abend zusammen,
mich würde interessieren, ob es eine Möglichkeit gibt, in Access Formularen Textfelder Steuerelemente mit einem Cue-Banner (eine schwache Cue-Textnachricht, die dem Benutzer mitteilen soll, was in dieses Feld eingegeben werden soll. Beim Klick darauf verschwindet der Hilfstext und es steht ein leeres Textfeld zur Verfügung).So wie das auf dem Bild zu sehen ist, funktioniert das soweit schon recht gut. Allerdings nur sehr umständlich und mit der Einschränkung dass das Textfeld ungebunden ist. Gibts da noch ne bessere Variante um das umzusetzen? auch mit gebundenen Textfeldern?
Danke schon mal im Voraus.
Liebe Grüße
Hi, also du möchtest einen Tip anzeigen wenn man mit der Maus über das Feld geht?
Dazu gibt es wenn du das Feld anklickst unter Eigenschaftenblatt / Andere / SteuerelementTip - Text
Warum sollte das nicht gebundenen Feldern gehen?
Grüsse J.D
Hallo,
nein, SteuerelementTipText ist es nicht was er sucht.
Das geht nur über ein Trick.
Erstell dein Formular mit z.B: 2 Textboxen Text0 und Text2. Die Standardwerte setzt du in dem Eigenschaftsfenster unter Daten/Standardwert. Dann noch ein zusätzliches Textfeld größe 0,02/0,02 ohne Rahmen die Reihenfolgenposition 0 bekommt.
Im Code schreibst du dann:
Option Compare Database
Option Explicit
Private Sub Text0_GotFocus()
SwitchDefault Me.Text0, """<Benutzername>"""
End Sub
Private Sub Text0_LostFocus()
SwitchDefault Me.Text0, """<Benutzername>"""
End Sub
Private Sub Text2_GotFocus()
SwitchDefault Me.Text2, """*************"""
End Sub
Private Sub Text2_LostFocus()
SwitchDefault Me.Text2, """*************"""
End Sub
Private Sub SwitchDefault(ByVal ctl As Control, ByVal Default As String)
With ctl
If Nz(ctl.Value, "") = "" Then
.DefaultValue = Default
.ForeColor = RGB(127, 127, 127)
ElseIf Mid(Default, 2, Len(Default) - 2) = ctl.Value Then
.ForeColor = RGB(0, 0, 0)
.DefaultValue = vbNullString
.SelText = ""
End If
End With
End Sub
Beispiel anbei.
Gruß Andreas
Hallo J.D. Ich suche genau die Lösung die Andreas hat. Trotzdem besten Dank für deine Antwort.
hey Andreas,
;D ;D genau das was ich suchte. Besten dank dafür. Habe ich denn den richtigen Namen dafür verwendet? Heißen die Teile denn so? Gerne würde ich noch wissen, ob man diese Methode auch auf gebundene Textfelder anwenden kann? Beispielsweise bei einem gewöhnlichen Formular mit Datenbindung? Ist ja doch ein Stück komplizierter als einen Steuerelement-TipText anzuwenden... Noch einen schönen Sonntag und nochmals besten Dank
Hallo,
ja die Bezeichnung ist korrekt.
DefaultValue wird bei gebundenen Textboxen nicht funktionieren.
Man könnte statt dessen den Value verwenden - aber dann wird ja dieser Vorschautext bereits in der Tabelle gespeichert.
Es funktioniert, ist aber ein größerer Aufwand. Hier der Code dazu für 5 Felder einer Adresseneingabe. Diesmal sind die Focus-Events nicht im Code sondern als Funktionsaufruf direkt in den Eigenschaften. Siehe Beispiel.
Option Compare Database
Option Explicit
Dim strDefault As String
Public Function FocusIn(ByVal ctl As Control)
SwitchDefault ctl
End Function
Public Function FocusOut(ByVal ctl As Control)
SwitchDefault ctl
End Function
Private Sub SwitchDefault(ByVal ctl As Control)
With ctl
If Nz(ctl.Value, "") = "" Then
.Value = Mid(.DefaultValue, 2, Len(.DefaultValue) - 2)
.ForeColor = RGB(127, 127, 127)
ElseIf Mid(.DefaultValue, 2, Len(.DefaultValue) - 2) = ctl.Value Then
.ForeColor = RGB(0, 0, 0)
.Value = vbNullString
.SelText = ""
End If
End With
End Sub
Private Sub Form_Current()
Dim ctl As Control
MyFocus.SetFocus
For Each ctl In Me.Controls
If ctl.Tag = "t1" Then
If Mid(ctl.Value, 1, 1) = "<" Then
ctl.ForeColor = RGB(127, 127, 127)
Else
ctl.ForeColor = RGB(0, 0, 0)
End If
End If
Next
End Sub
Private Sub Form_Load()
If Left(Me.txtVorname, 1) = "<" Then Me.txtVorname = Mid(Me.txtVorname.DefaultValue, 2, Len(Me.txtVorname.DefaultValue) - 2) Else Me.txtVorname.ForeColor = RGB(0, 0, 0)
If Left(Me.txtNachname, 1) = "<" Then Me.txtNachname = Mid(Me.txtNachname.DefaultValue, 2, Len(Me.txtNachname.DefaultValue) - 2) Else Me.txtNachname.ForeColor = RGB(0, 0, 0)
If Left(Me.txtStrasse, 1) = "<" Then Me.txtStrasse = Mid(Me.txtStrasse.DefaultValue, 2, Len(Me.txtStrasse.DefaultValue) - 2) Else Me.txtStrasse.ForeColor = RGB(0, 0, 0)
If Left(Me.txtPLZ, 1) = "<" Then Me.txtPLZ = Mid(Me.txtPLZ.DefaultValue, 2, Len(Me.txtPLZ.DefaultValue) - 2) Else Me.txtPLZ.ForeColor = RGB(0, 0, 0)
If Left(Me.txtOrt, 1) = "<" Then Me.txtOrt = Mid(Me.txtOrt.DefaultValue, 2, Len(Me.txtOrt.DefaultValue) - 2) Else Me.txtOrt.ForeColor = RGB(0, 0, 0)
End Sub
Beispiel Anbei.
Man sieht gleich dass es etwas gewöhnungsbedürftig ist so zu arbeiten - man muss es wollen.
Gruß Andreas
Hallo Andreas,
zunächst mal alles läuft so wie es laufen soll. Vielen Dank für deine Mühen. War nicht ganz wenig Arbeit, aber ich finde Selbige hat sich in jeder Hinsicht gelohnt. Abschließend bleibt aber noch ne kleine Unklarheit übrig.
Ich habe jetzt die SubProzeduren immer von Modul zu Modul kopiert. Besteht die Möglichkeit wenigstens die Funktionen und die Switch-Default in einem anderen Modul abzuspeichern, und von überall darauf zuzugreifen?
Beste Grüße
Stefan
Hallo,
du kannst FocusIn, FocusOut und SwitchDefault in ein Modul packen, SwitchDefault muss dann auch Public deklariert werden.
Änderungen sind keine Notwendig.
Gruß Andreas
hi, sorry dass ich erst jetzt antworten kann. Hatte Probleme mit meinem Rechner. Hatte noch alles aufgeräumt, und die beiden Funktionen nebst Prozedur in einen anderem Modul abgespeichert. Es gab keinerlei Probleme damit.
Muss das Thema jetzt explizit von mir geschlossen werden, oder passiert das automatisch? Verzeiht wenn das ne dumme Frage ist. Aber dieSuche nach einer entsprechenden Schaltfläche blieb erfolglos. :D :D
Hallo und guten Tag,
ich habe mir dieses interessante Beispiel ebenfalls angesehen,
spart es doch hier und da die Bezeichnungsfelder für Textfelder.
Frage:
könnte man dies auch für Felder vom Typ Felddatentyp "Zahl" verwenden?
Es geht zur Zeit nur wenn ich als Standardwert "0" definiere jedoch wird
dieser Wert in die Herkunftstabelle übernommen.
Danke und Grüße