Newsgroup: it.comp.lang.visual-basic
Titolo: Catturare il lost focus e il got focus delle textbox

Ciao a tutti,
Associati a una normalissima casella di testo ci sono i due eventi LostFocus
e GotFocus.
Ho un form dove vi sono parecchie textbox. Il mio intento è colorare la
textbox attiva (settando un certo valore di backcolor) lasciando tutte le
altre bianche.
Per fare ciò ho agito in due modi:
1) scrivendo (che palle!!) codice sugli eventi (LostFocus e GotFocus) di
ogni casella di testo
2) riscrivendo un user control... ma poi mi sono imbattuto in altri problemi
relativi alla gestione dell'oggetto (ereditarietà di proprietà legate al
database).
Sto cercanco un metodo o evento del form che mi faccia capire quando cambia
l'oggetto attivo o riesca a intercettare l'evento di pressione di Tab o
Click (gli unici per i quali dovrebbe cambiare il fuoco).
Ho già provato con Form_KeyPress, Form_KeyDown, etc. (anche settando la
proprietà della Form KeyPreview a True) ma non funziona..
Grazie.
    Franceso.

Francesco,
Non sarebbe più semplice chiamare tutte le textbox del form con lo stesso
nome, ottenendo cioè un'array di Textbox, così da gestire
solo 2 routine d'evento 'LostFocus' e 'GotFocus' (invece che 2 * quante 
textbox hai...) ???
Altrimenti se Form_KeyDown hai detto che non funziona... non mi viene
in mente nient'altro.
Buona fortuna !!! :)))
             § Roby §

Sono daccordo con Roby che la scelta migliore sia indicizzare il nome della
TexBox
comunque se proprio non puo fare a meno di usare diversi nomi di TextBox
puo cercare di intercettare la posizione del mouse.
Ti butto velocemente quattro linee e scusa se il codice non è dei migliori
ma vista l'ora (;-P
Dunque io direi:
'---------------------------------------------------------------------------
---------------
Option Explicit
Const NumTextBox = 9 ' Si conta da 0 quindi nel mio Form ci sono 10 textbox
Dim FocusLeftText(NumTextBox) As Integer
Dim FocusTopText(NumTextBox) As Integer
Dim FocusHeightText(NumTextBox) As Integer
Dim FocusWidthText(NumTextBox) As Integer
Dim TextBox As TextBox
Private Sub Form_Load()
Dim TempX As Integer
' di seguito mi inserisco negli array le posizioni,la grandezza e
'la lunghezza delle textbox
For Each TextBox In Form1
 FocusLeftText(TempX) = TextBox.Left
 FocusTopText(TempX) = TextBox.Top
 FocusHeightText(TempX) = TextBox.Height
 FocusWidthText(TempX) = TextBox.Width
 TempX = TempX + 1
Next TextBox
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, x As Single,
Y As Single)
Dim TempZ As Integer
Dim TempI As Integer
For TempI = 0 To NumTextBox
 If (Y >= FocusTopText(TempI) - 15) And (Y <= FocusTopText(TempI) +
FocusHeightText(TempI)) Then
  If (x >= FocusLeftText(TempI) - 15) And (x <= FocusWidthText(TempI) +
FocusLeftText(TempI)) Then
   For Each TextBox In Form1
    If TempZ = TempI Then
      TextBox.BackColor = &HC0C0C0 ' se entro nel campo della textbox
diventa grigia
     Else
      TextBox.BackColor = &H80000005 'qui le textbox successive diventano
bianche
    End If
    TempZ = TempZ + 1
   Next TextBox
  End If
 End If
Next TempI
End Sub
'---------------------------------------------------------------------------
------------------------------------
Spero di esserti stato utile . Ciao e Buona Notte (;-P
"Francesco Bergamo" <zioc...@NOSPAMvizzavi.it> ha scritto nel messaggio
news:10107371...@tiglio.venaria.marelli.it...
