come da lunghissimo titolo se apro un form da un altro form con l'opzione showmodal, non mi funziona l'evento keypress in una textbox
togliendo l'opzione modal l'evento funziona regolarmente
Come mai?
Ma sei sicuro? Io uso l'evento keypress nel mio programma dove i richiami delle form subordinate sono tutti fatti con showmodal ed a me funzionano perfettamente, sia a livello di textBox che a livello di form.
Attenzione, l'evento KeyPress viene scatenato soltanto con la pressione di un tasto, non dal click del mouse!
Riporto come esempio una parte di codice:
Richiamo di Form subordinate:
PUBLIC SUB Menu6_Click() 'Inserimento Movimenti giornalieri
$_SceltOper = "Menu6" 'è stato scelto il percorso dell'INSRIMENTO MOVIMENTI DI GIORNATA CONTABILE
Form1.$_TipoRich = "Autom"
Form1.ShowModal
IF $_SceltOper = "Menu6" THEN
Form2.ShowModal 'avvio della procedura di INSRIMENTO MOVIMENTI DI GIORNATA CONTABILE
ELSE
ENDIF
END
Schedulazione dell'evento KeyPress:
PUBLIC SUB ImpMovDig_KeyPress()
$_StriMia = Modulivari.QualeTasto($_StriMia) ' richiamo del modulo per limitare l'input ai soli dati numerici
SELECT CASE $_StriMia
CASE "Freccia-dx", "Freccia-Sx", "Freccia-su", "Freccia-giù", "Freccia-Home", "Freccia-fine", "Pag-su", "Pag-giù", "Tab-Avanti", "Tab-Indietro", "Esc", "Canc-crt-prec", "Canc-crt-corr"
' CASE "Freccia-dx", "Freccia-
CASE "0" TO "9"
$_StriMia = ImpMovDig.Text
i_Conta = ImpMovDig.Pos
Modulivari.i_NumDecim = 2 'Tipo di dato ammesso -->> solo numerico con 2 cifre decimali
$_StriMia = Modulivari.TestDecimali($_StriMia, i_Conta) 'rifiuta l'input delterzo crt. dopo la virgola
i_Conta = Val(Right$($_StriMia)) 'rilevo il flag di presenza virgola
$_StriMia = Left($_StriMia) 'rilevo il n° dei crt decimali
IF i_Conta <> 0
IF $_StriMia = "2" THEN
IF b_Sw = FALSE
STOP EVENT
ELSE
b_Sw = FALSE
ENDIF
ENDIF
ENDIF
CASE ".", ","
i_Conta = InStr(ImpMovDig.Text, ",")
IF i_Conta <> 0 THEN
STOP EVENT
ENDIF
CASE ELSE
STOP EVENT
END SELECT
END
Individuazione del
tasto premuto
PUBLIC FUNCTION QualeTasto($_Como AS String) AS String 'Intercettazione del tasto premuto dall'operatore
DIM $_Type AS String
$_Type = $_Como
SELECT CASE Key.Code
CASE Key.Enter, Key.Return 'testa la pressione del tasto "INVIO" del tastierino numerico ovvero della tastiera alfanumerica
$_Como = "Invio"
CASE Key.Right
$_Como = "Freccia-dx"
CASE Key.Left
$_Como = "Freccia-Sx"
CASE Key.Up
$_Como = "Freccia-su"
CASE Key.Down
$_Como = "Freccia-giù"
CASE Key.Home
$_Como = "Freccia-Home"
CASE Key.End
$_Como = "Freccia-fine"
CASE Key.PageUp
$_Como = "Pag-su"
CASE Key.PageDown
$_Como = "Pag-giù"
CASE Key.Tab
$_Como = "Tab-Avanti"
CASE Key.BackTab
$_Como = "Tab-Indietro"
CASE Key.Esc
$_Como = "Esc"
CASE Key.BackSpace
$_Como = "Canc-crt-prec"
CASE Key.Delete
$_Como = "Canc-crt-corr"
CASE Key.F1
$_Como = "F1"
CASE Key.F2
$_Como = "F2"
CASE Key.F3
$_Como = "F3"
CASE Key.F3
$_Como = "F4"
CASE Key.F5
$_Como = "F5"
CASE Key.F6
$_Como = "F6"
CASE Key.F7
$_Como = "F7"
CASE Key.F8
$_Como = "F8"
CASE Key.F9
$_Como = "F9"
CASE Key.F10
$_Como = "F10"
CASE Key.F11
$_Como = "F11"
CASE Key.F12
$_Como = "F12"
' CASE Key.Shift & Key.Home
' Message.Info("Hai selezionato crt nella stringa")
CASE ELSE
$_Como = Key.Text
SELECT CASE $_Type
CASE "N", "€", "£" 'Tipo di dato ammesso -->> solo numerico"
SELECT CASE $_Como
CASE "0" TO "9"
CASE ELSE
SELECT CASE $_Type
CASE "N", "€" 'dato numerico ammesso con crt decimali
SELECT CASE $_Como
CASE ".", ","
CASE ELSE
STOP EVENT
END SELECT
CASE ELSE
STOP EVENT
END SELECT
END SELECT
CASE "A" 'Typo di dato ammesso -->> solo alfabetico
SELECT CASE $_Como
CASE "A" TO "Z", "a" TO "z"
CASE ELSE
'Message.Info("Tasto: " & Key.text & "/cod." & Key.Code & Chr(10) & "non riconosciuto")
STOP EVENT
END SELECT
END SELECT
END SELECT
RETURN $_Como
END
Non si sa mai, magari ti può essere d'aiuto.