Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

wie deaktiviere ich im Textfeld eines Formulars die Tasteneingabe Alt + Return?





Frage

Zeilenumbruch in Access geht nur über Strg + Return (Enter), daher möchte ich obige Kombination deaktivieren, das hierbei das Eigenschaftsfenster aufgeht. Evtl. wurde schon mal eine Lösung gezeigt, leider fand ich nichts.

Antwort 1 von Marie

zum Beispiel bei dem Ereignis VorAktualisieren des Formulars:

If instr(Me!DeinFeld, vbcr) > 0 OR
instr(Me!DeinFeld, vblf) > 0 then
MsgBox "Zeilenumbrüche sind nicht erlaubt."
Cancel = True
Me!DeinFeld.SetFocus
End If


Gruß Marie

Antwort 2 von lemmy49

Hallo Marie, vielen Dank für Antwort.
Ist aber nicht das was ich meinte.

Im Feld sollte schon ein Zeilenumbruch erlaubt sein, aber die Tastenkombination Alt + Return erzeugt das Popup der Feldeigenschaft.
Ich will nur Strg + Return (Enter) erlauben.
Ansonsten soll keine Aktion erfolgen bzw. zum Testen eine Meldung.

Was ich fand ist:
If (Shift And acAltMask) > 0 Then
Msgbox "Meldung"

Aber mir fehlt noch zusätzlich Return/Enter.

Evtl. gibt es noch andere Möglichkeiten.

Danke und Gruß Dieter

Antwort 3 von lorf55

Hallo Dieter,
um für ein textfeld Alt+ENTER abzufangen, geht:
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim intAltGedr As Integer

    ' Bit-Masken einsetzen, um die gedrückte Taste zu ermitteln.
    intAltGedr = (Shift And acAltMask) > 0
    ' Per Meldung dem Benutzer mitteilen, welche Taste gedrückt wurde.
    If intAltGedr And (KeyCode = vbKeyReturn) Then MsgBox "Sie haben ALT+Return gedrückt."
End Sub


Um für das ganze Formular Alt+ENTER abzufangen, geht:
Private Sub Form_Load()
    Me.KeyPreview = True
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim intAltGedr As Integer
    ' Bit-Masken einsetzen, um die gedrückte Taste zu ermitteln.
    intAltGedr = (Shift And acAltMask) > 0
    ' Per Meldung dem Benutzer mitteilen, welche Taste gedrückt wurde.
    If intAltGedr And (KeyCode = vbKeyReturn) Then MsgBox "Sie haben ALT+Return gedrückt."
End Sub
Wichtig ist, dass über Form_Load die Tastenvorschau für das Formular eingeschaltet wird .


Allerdings wird so das Ereignis nicht aus der Messagequeue (auch nicht durch DoCmd.CancelEvent) bzw. erst durch die Msgbox entfernt. Deshalb ersetzt du die MsgBox durch:
       KeyCode = 0
       Shift = 0
Das verhindert, dass der Tastencode an andere Ereignisprozeduren weiter gegeben wird, so dass Form_KeyDown denn so aussieht:
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim intAltGedr As Integer
    ' Bit-Masken einsetzen, um die gedrückte Taste zu ermitteln.
    intAltGedr = (Shift And acAltMask) > 0
    If intAltGedr And (KeyCode = vbKeyReturn) Then
       '   ALT+Return gedrückt
       KeyCode = 0
       Shift = 0
    End If
End Sub


Ich hoffe, du kannst damit was anfangen.
Gruß
lorf

Antwort 4 von lemmy49

Hallo Lorf, supiii !
Genau so muß es gehen.
Hast mir sehr geholfen, Danke.

Habe im Internet nach Lösungen gesucht und nichts gefunden, auch mein Buch über VBA Lösungen gab nichts her.

Es gibt halt doch Spezialisten; da bin ich noch ein kleines Lichtchen.

Grüße Dieter

Antwort 5 von lorf55

Hallo Dieter,
Danke gleichfalls, war mir eine Freude.
Ob du es mir glaubst oder nicht, es steht alles in der Hilfe drin. Allerdings musste man es sich noch zusammenreimen. Das wird einem allerdings nicht unbedingt leicht gemacht. Vielleicht sollte ich mich Reimer, Dichter oder Klempner nennen.
Schön, wenn es funktioniert. Denn können wir ja einen Haken dran machen (Lsg) und uns freuen.

Denn bis die Tage

Gruß
lorf