PDA

Vollständige Version anzeigen : Textfeld nach Fokusverlust auf Eingabe prüfen


Reinixxx
18.06.2001, 15:31
Hallo!

Wie kann ich beim Fokusverlust einen Textfeldes in einem Formular überprüfen, ob eine Eingabe gemacht worden ist?
Und wenn keine Eingabe erfolgte, soll dieses Textfeld wieder den Fokus erhalten.
Wer kann mir bitte helfen?

mfg. Reini

ElHefe
18.06.2001, 16:09
hi reinixxx!

bei einem textfeld kannst du AFAIK das Ereignis Beim Fokusverlust auswählen. Das Textfeld kannst du ja mit Textfeldname.value ansprechen! Nun kannst du prüfen, ob der Value = "" ist! in diesem fall setzt du den Fokus mit me.feldname.setfocus einfach wieder auf das textfeld!

eine andere möglichkeit wäre, die Felder bei denen Eingaben erforderlich sind in der Entwurfsansicht der Tabelle mit der Eigenschaft "Eingabe erforderlich" zu kennzeichnen! dazu einfach den feldnamen auswählen und im register "allgemein" "eingabe erforderlich = ja" wählen!!!

hope that reicht dir!
alle angaben wie immer ohne Gewehr :-)

Reinixxx
18.06.2001, 20:00
Hallo ElHefe!

Ich habe es jetzt mit folgenden Code versucht.

Private Sub Kundennummer_LostFocus()

If Kundennummer.Value = "" Then
Me.Kundennummer.SetFocus
End If

End Sub

Aber so funktioniert es nicht.
Was ist daran falsch?

Reinixxx

kama
18.06.2001, 20:05
Versuchsmal mit
If me!Kundenummer="" Then..

Value ist die Eigenschaft Standardwert eines Feldes!!

ElHefe
18.06.2001, 20:08
Private Sub Kundennummer_LostFocus()
If Me.Kundennummer.Value = ""
Then Me.Kundennummer.SetFocus
End If
End Sub

also, erstmal vor kundennummer.value ein me setzen!
wenn das auch nicht funktioniert, schreib zurück ( falls es zu einer fehlermeldung kommt, schreib mir die mal auch!
(sorry für die darstellung :-))

kama
18.06.2001, 20:14
Laß dich nicht von Elhefe verwirren!:-))
Mit seinem code fragst du die Eigenschaft eines feldes und nicht den Inhalt ab.

ElHefe
18.06.2001, 20:14
hi kama!

aber dadurch das hinter kundennummer .value steht gibts keinen fehler, oder :-))

kama
18.06.2001, 20:19
Nein!!
aber es wird ja der Falsche wert geprüft.
auserdem sollte man besser
auf
DoCmd.GoToControl "Feldname"
zurückgreifen.

Wenn ein feld den focus hat muß nicht unbedingt der curser drin stehen.

ElHefe
18.06.2001, 20:23
ok kama!

werd ich mir merken!
bei mir gab's bis jetzt keine probleme bei meiner Vorgehensweise!
aber ich werd deinen vorschlag auch mal probieren!!!
thanx!

kama
18.06.2001, 20:42
Nehme das mit Value mit dem ausdruck des bedauerns zurück
Habe es mit defaultValue verwechselt
Sorry :-((
Aber es geht auch ohne.

jinx
18.06.2001, 20:47
<font size="2" face="Century Gothic">Moin und tschuldigung, dass ich mich in diese angeregte Diskussion einmische... :rolleyes:

@Reinixx:
Warum verhinderst Du per Einstellung "Eingabe erforderlich" unter Umgehung allen Codes nicht den Fokusverlust des Feldes? Oder ist das zu einfach.... :confused:

@ElHefe:
Touché ... aber: Edith Piaf: non, je ne regrette rien. :D </font>

[Dieser Beitrag wurde von jinx am 18.06.2001 editiert.]

ElHefe
18.06.2001, 21:55
hi jinx!
wie schauts'?
wie du oben im thread siehst, hab ich das da schon geschrieben, oder? :-)

ElHefe
18.06.2001, 21:59
oh kama!

now i'm very confused!
wußt ich doch! na ja, jeder kann sich mal irren!
wie jinx das schon richtig erkannt hat ist es natürlich einfacher die Eingabe lt. Tabelle erforderlich zu machen!
aber jeder wie er lust hat!

schöne n8 noch!

Reinixxx
19.06.2001, 18:24
Hi

Ich habe es mit folgenden Code ohne Erfolg versucht.

Private Sub Kundennummer_LostFocus()
If Me.Kundennummer.Value = "" Then
Me.Kundennummer.SetFocus
End If
End Sub

Mein Problem ist folgendes:
Ich habe ein Formular mit einem Unterformular.
Wenn ich zuerst Daten in ins Unterformular eingebe, kommt die Fehlermeldung

“Das Feld ’Auftragsnummer’ kann keinen Null-Wert enthalten, da die Required-Eigenschaft
für dieses Feld den Wert True hat. Geben Sie in das Feld einen Wert ein“

Jetzt kann ich aber keinen Daten mehr ins Hautformular eingeben.
Darum möchte ich die Eingebe in dieses Textfeld erzwingen.

Hat noch jemand einen Tip?

Reinixxx

kama
19.06.2001, 18:42
Ich denke mal deine DB ist jetzt ordentlich durchgemischt
Und wie die Kollegen hier schon angemerkt haben ist für dein Problem eine Möglichkeit vorgesehen. (kommt nämlich häufig vor)
Mein rat
Deaktivier jeglichen code der mit diesem problem etwas zu tuen hat
Kontrolliere dein Tabellendesign auf den Eingabeerforderlich=ja
Die von dir geschilderte Fehlermeldung kenne ich nur im zusammenhang mit der Aktivierungsreighenfolge im Formular
Falsche Reihenfolge. Aber ich halte ein ReDesign deiner Tabellen für besser
UND!!! Schlaf mal ne Nacht drüber, das hilft manchmal ungemein (WALD und Bäume UNDSO)

Reinixxx
19.06.2001, 19:07
Hi

Mein Problem hat nichts mit dem Code zutun, sondern mit dem Code möchte ich dieses Problem beheben.

Reinixxx

Stema
20.06.2001, 01:09
Hallo Leute,
ihr müßt das Ereignis "Beim Verlassen" verwenden, nicht "Beim Fokusverlust". Außerdem auf Isnull abprüfen.
If Me.txtBox = "" Or IsNull(Me.txtBox) then Me.txtBox.SetFocus

A.S.
20.06.2001, 05:22
Hallo Kama,

bitte lies Dir mal folgendes aus der OnlineHilfe zur ".Value"-Eigenschaft durch:


Mit der Eigenschaft Value können Sie ermitteln oder angeben, ob ein Steuerelement ausgewählt ist, welcher Wert oder welche Option innerhalb des Steuerelements ausgewählt ist oder welcher Text in einem Textfeld-Steuerelement enthalten ist. Kontrollkästchen-, Optionsfeld- und Umschaltfläche-Steuerelemente. Ermitteln oder geben an, ob das Steuerelement ausgewählt ist oder nicht. Kombinationsfeld-, Listenfeld- und Optionsgruppen-Steuerelemente. Ermitteln oder geben an, welcher Wert oder welche Option im Steuerelement ausgewählt ist. Textfeld-Steuerelemente. Ermitteln den Text im Textfeld oder geben ihn an. Register-Steuerelement. Emittelt das ausgewählte Page-Objekt oder gibt es an.

Wie Du sehen kannst, wird über die ".Value"-Eigenschaft der derzeit in Textfeldern eingetragene Wert und nicht irgendwas anderes abgefragt. ElHefe kann also durchaus so weiterarbeiten wie bisher.

------------------
HTH

Arno

A.S.
20.06.2001, 05:30
Sorry Kama, bis hierhin hatte ich noch nicht gelesen.

Nochmal um die evtl. Verwirrungen bei den anderen zu entwirren:

Die ".Value"-Eigenschaft ist, wie Kama bereits erwähnte, die Standard-Eigenschaft der - fast aller - Steuerelemente. Es gibt glaube ich ein paar die diese Eigenschaft nicht haben.

Wird bei Abfrage eines Steuerelementes überhaupt keine Eigenschaft angegeben (z. Bsp. "Me.Textfeld1") wird dies von Acc intern automatisch in die Standardeigenschaft umgesetzt also sowieso "Me.Textfeld1.Value" genutzt. Aus Gründen der besseren Lesbarkeit des Codings sollte man die Eigenschaft aber trotzdem einsetzen. Vor allem wenn man mit Steuerelementen arbeitet, die evtl. nicht über diese Eigenschaft verfügen.

------------------
HTH

Arno

Lupus
20.06.2001, 05:45
Hallo Leute,

mal eine frage: warum so kompliziert ?

ich habe eine ungebundenes Feld den Namen [TempWert] gebeben, die Eigenschaft auf nicht Sichbar.
Bei Kundennummer Fokuserhalt, wird der Wert des Feldes an [TempWert] übergeben.
Bei Fokusverlust wird der Wert [TempWert] mit dem Wert [Kundennummer] vergleichen.
Stimmen die Werte überein, Meldung, wenn nicht .. dann wurde auch was geändert.

der Code dazu:

Private Sub Kundennummer_GotFocus()
With CodeContextObject
.TempWert = .Kundennummer
End With

End Sub

Private Sub Kundennummer_LostFocus()
With CodeContextObject
If (.Kundennummer = .TempWert) Then
Beep
MsgBox "Bitte Ändern Sie den Wert", vbOKOnly, ""
End If
End With

End Sub

Gruß Lupus

kama
20.06.2001, 06:17
Morgen
Seid ihr aus dem Bett gefallen oder habt ihr durch gemacht
Ich denke sein code und das vorgehen ist richtig
Jetzt hat er sich zusätzlich eine Rekursion eingebaut.
Wenn der Benutzer als nächstes ein Feld anspringt, das die Eigenschaft Eingabe erforderlich hat, und dann von seinem code wieder aus dem Focus geholt wird meckert Access natürlich, weil da nix drrin steht.
Aber es bleibt dabei Felder in die etwas eingegeben werden müssen, sollten durch das Tabellendesign vorbereitet werden.
Ich bleibe deshalb auch bei meinem Vorschlägen von gestern:

eine Nacht drüber schlafen
Weg mit dem Code
Tabellen redesign(hört sich gut an)

Reinixxx
20.06.2001, 19:43
Hallo Leute!

Ich bin jetzt einen Schritt weiter.
Mit diesen Code erscheint zumindest die MessageBox.
SetFocus funktioniert aber immer noch nicht.
Private Sub Kundennummer_LostFocus()
If Me.Kundennummer = "" Or IsNull(Me.Kundennummer) Then
Beep
MsgBox "FEHLER!!!", vbOKOnly, ""
Me.Kundennummer.SetFocus
End If
End Sub
Hat noch jemand eine Idee?

Reinixxx

Scorefun
20.06.2001, 20:05
also ich persoenlich wuerde "OnExit" ebenfalls dem "LostFocus" vorziehen, so wie es Stema irgendwann letzte Nacht (gaehn) vorgeschlagen hat.
Dann aber anschließend nix mit setfocus rumprobieren, sondern einfach:

Cancel = true

setzen dann kommt man nicht aus dem Steuerelement raus, bevor eine Eingabe gemacht wurde.

Reinixxx
20.06.2001, 20:25
Danke Scorefun,
und natürlich auch ein DANKE an alle anderen die mir geholfen haben.
Jetzt funktioniert es genau so wie ich mir es vorgestellt habe.

mfg. Reinixxx