PDA

Vollständige Version anzeigen : Fokus im aktuellen Feld lassen


dancer1970
16.01.2003, 11:18
Hallo,
ich habe immernoch ein Problem mit meinen Zeichen im ungebunden Formularfeld.
Ich habe folgende Ereignisprozeduren:

Private Sub Text9_KeyDown(KeyCode As Integer, Shift As Integer)
Dim Cancel As Integer
If (Shift And acCtrlMask) > 0 And KeyCode = vbKeyReturn Then
MsgBox "Ein Zeilenumbruch ist in diesem Feld nicht zulässig", vbInformation, "Falsches Zeichen"
Cancel = True
Me.Text9.SetFocus
End If
End Sub

Private Sub Text9_KeyPress(KeyAscii As Integer)
If tastencheck(KeyAscii) = False Then
KeyAscii = 0
MsgBox "Das eingegebene Zeichen ist nicht zulässig!", vbInformation, "Falsches Zeichen"
Else
End If
Exit Sub
End Sub

und im Modul:
Function tastencheck(KeyAscii As Integer) As Boolean
Select Case KeyAscii
Case 0 - 7, 9 - 12, 14 - 32, 34 - 37, 39, 42, 59, 96, 126
' verbietet nicht druckbare Zeichen ausser BS und CR, " # $ % '* ; ` ~
tastencheck = False
Case Else
tastencheck = True
End Select
End Function

Soweit scheint das alles zu funktionieren, aber wenn ich strg+enter drücke kommt zwar die Fehlermeldung und es wird auch kein Zeilenumbruch durchgeführt, aber der Curser wandert ins nächste Feld, was in diesem Fall nicht sinnvoll ist, da der Anwender sicher noch mehr Text schreiben wollte, wenn er denn schon einen Umruch einfügen möchte.

Warum funktioniert das mit cancel und setfocus nicht?

Für bessere Lösungen wg. dem keydown bin ich dankbar.

Danke Stefan

Aquarii
16.01.2003, 12:38
Hallo Stefan,

die Tastenkombination Strg-Enter liefert Keyascii = 10.

Diesen Wert fängst du aber in Deinem Code ab. Versuche es mal, indem Du die 10 ausnimmst:

Function tastencheck(KeyAscii As Integer) As Boolean
Select Case KeyAscii
Case 0 - 7, 9, 11 - 12, 14 - 32, 34 - 37, 39, 42, 59, 96, 126
...

dancer1970
16.01.2003, 12:57
habe das jetzt in

Function tastencheck(KeyAscii As Integer) As Boolean
Select Case KeyAscii
Case 0 - 7, 9, 11 - 12, 14 - 32, 34 - 37, 39, 42, 59, 96, 126
' verbietet nicht druckbare Zeichen ausser BS und CR, " # $ % '* ; ` ~
tastencheck = False
Case Else
tastencheck = True
End Select
End Function

geändert.

Allerdigs verhält es sich wie vorher!

ich dachte das strg gar keinen ascii code erzeugt???

ist 10 nicht LF?

dancer1970
16.01.2003, 13:14
Ich denke jetzt habe ich die Lösung:
Danke für den Tipp mit ascii 10!

Private Sub Text9_KeyPress(KeyAscii As Integer)
If KeyAscii = 10 Then 'soll Zeilenumbruch mit strg + enter verbieten
KeyAscii = 0
MsgBox "In diesem Feld ist ein Zeilenumbruch nicht zulässig!", vbInformation, "Falsches Zeichen"
Else
If tastencheck(KeyAscii) = False Then
KeyAscii = 0
MsgBox "Das eingegebene Zeichen ist nicht zulässig!", vbInformation, "Falsches Zeichen"
Else
End If
End If
Exit Sub
End Sub

und Modul

Function tastencheck(KeyAscii As Integer) As Boolean
Select Case KeyAscii
Case 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 39, 42, 59, 96, 126
' verbietet nicht druckbare Zeichen ausser BS und CR, " # $ % '* ; ` ~
tastencheck = False
Case Else
tastencheck = True
End Select
End Function