Neuigkeiten:

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

Mobiles Hauptmenü

Textfelder mit Cue-Bannern

Begonnen von SMBR, März 07, 2020, 22:07:35

⏪ vorheriges - nächstes ⏩

SMBR

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

J.D

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
Hilfe zur Selbsthilfe vs. learning by burning
Schritt 1.2

Hondo

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

SMBR

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

Hondo

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

SMBR

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

Hondo

Hallo,
du kannst FocusIn, FocusOut und SwitchDefault in ein Modul packen, SwitchDefault muss dann auch Public deklariert werden.
Änderungen sind keine Notwendig.
Gruß Andreas

SMBR

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

CCHEK

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