Con Gambas ho imparato a non fidarmi dell'istruzione SetFocus che in VB funzionava perfettamente.
A causa di errori operativi riscontrati all'interno di una FormXX.class, mi sono deciso a rivedere il codice scritto a suo tempo e modificarlo radicalmente, nella speranza di ottenere un funzionamento sempre corretto.
La Form in questione gestisce alcune ComboBox che sono viste come Groups. Ciò determina l'impossibilità di sapere quale delle diverse ComboBox abbia il Focus. In determinate condizioni raggiunte durante la digitazione, la sequenza naturale delle istruzioni dovrebbe interrompersi per riprendere dal GotFocus della ComboBox appena lascita. Infatti la necessità di tornare alla ComboBox precedente può essere intercettata solamente all'interno dell'evento LostFocus della stessa, cioè soltanto dopo che la ComboBox precedente non è più attiva.. Non potendo a tal punto utilizzare in maniera semplice il SetFocus, l'unica strada percorribile diventerebbe, a mio avviso, quella di simulare la pressione della combinazione di tasti [shift+ backtab]. Ho dato una rapida lettura qui (http://www.gambas-it.org/smf/index.php?topic=1267.msg13997#msg13997), ma non ho capito come ottenere il CHR corrispondente alla Key.BackTab. Ho tentato allora di provare la seguente istruzione:
Desktop.SendKeys(Key.BackTab)
L'istruzione è stata eseguita apparentemente bene, però il Focus non è tornato alla ComboBox precdente, contrariamente a quanto sperato. Infatti si è spostato comunque alla ComboBox immediatamente successiva.
Sono, pertanto. ahimè, costretto a vestire i panni del principiante per ottenere eventuali suggerimenti in merito al mio imprevedibile problema.
:(
...simulare la pressione della combinazione di tasti [shift+ backtab].
L'istruzione è stata eseguita apparentemente bene, però il Focus non è tornato alla ComboBox precdente, contrariamente a quanto sperato. Infatti si è spostato comunque alla ComboBox immediatamente successiva.
Dovresti usare:
Desktop.SendKeys("{[Shift_L] [Tab]}")
Dovresti usare:
Desktop.SendKeys("{[Shift_L] [Tab]}")
No, non funziona.
Comunque, non ti crucciare più di tanto, ho risolto con:
Private $SetFocus As String
--- bla --- bla --- bla ---
Public Sub CmbVociCont_LostFocus()
'-------------------------------------
CmbVoCoLostFocus_mio(Last.Name)
End
Private Sub CodVoxManLostFocus_mio()
--- bla --- bla --- bla ---
VoContCas.SetFocus
$SetFocus = "VoContCas"
--- bla --- bla --- bla ---
End
Public Sub CmbVociCont_GotFocus()
CmbVociCont_Entry()
End
Private Sub CmbVociCont_Entry()
If $SetFocus = Null Then
--- bla --- bla --- bla ---
endif
$SetFocus = Null
End
Procedendo col comando SetFocus e la successiva memorizzazione della ComboBox.Name richiamata, posso capire nella procedura comune di GotFocus se esiste un richiamo diverso dalla sequenza naturale di Gambas ed abbandonare la procedura. Poi Gambas riesce a puntare il Focus sulla ComboBox voluta da me.
Quindi non farò altre prove. Grazie per la collaborazione. Mi dispiace di avere impegnato la comunità per niente.
Chiedo umilmente scusa.