Avevo provato anch'io qualcosa del genere con .next e con .previous perché ho dei controlli su container differenti. Ma alla fine ho optato per gestire il focus da codice, con .setFocus all'evento KeyPress --> Key.Tab...
Almeno inserendo le search da ide non devo gestire anche quelle, perché come dicevi prima, ora seguono l'andamento della "gerarchia".
Invece quest'altra cosa è magnifica... La searchbox si comporta esattamente come una textbox.
Nel mio codice mi sono creato (seguendo sempre i tuoi insegnamenti :) ) questa Sub per pulire tutti i campi di testo presenti nel form... e pulisce anche quelli dei SearchBoxs. ;)
Public Sub pulizia(Optional salta As String)
Dim txt As Control
For Each txt In Me.Controls
If (Object.Class(txt).Name) = "TextBox" Or (Object.Class(txt).Name) = "TextArea" Then
If txt.name <> salta Then Object.SetProperty(txt, "Text", Null)
Endif
Next
End
Nel loop il nome del campo Text della SearchBox viene rilevato come "Txt".
PS: ho fatto anche un'altra Sub simile per colorare e per settare il font di tutte le label... ;D
Ho provato, ma con scarsi risultati... :-[
Mi rendo conto che le mie carenze nascono dalla non-conoscenza degli Array, bidimensionali.
Nella Sub della query per popolare la lista della searchbox ho dichiarato questo:
Public mioArray As New String[][]
Public Sub ricercami(campo As String, dato As String) As Collection
Dim sName As String
Dim sPercorso As String
Dim $hRicerca As New Connection
Dim sql As String
Dim ris As String
Dim i As Integer
Dim hres As Result
Dim risultato As New Collection
Dim primo As New String[]
With $hRicerca
.Type = avvio.sDbType
.Host = avvio.sDbPath
.Login = avvio.sDbLogin
.Password = avvio.sDbPass
.Name = avvio.sDbName
End With
$hRicerca.Open
$hRicerca.Begin
sql = "SELECT * FROM comuni WHERE " & campo & " LIKE '%" & my(dato) & "%';"
hres = $hRicerca.Exec(sql)
If hres.Available Then
mioArray.Clear
i = 0
For Each hres
primo.Clear
primo.Add(hres!comune, 0)
primo.Add(hres!prov, 1)
primo.Add(hres!codistat, 2)
mioArray.Add(primo, i) ' --> questo dovrebbe popolare il mioArray bidimensionale
ris = hres[campo] & " - " & hres!prov
risultato.Add(ris, i) ' --> questo va a popolare la lista della searchbox
Inc i
Next
Endif
$hRicerca.Close
Return risultato
End
Quando però chiamo l'evento _Found...
Public Sub sbxLuogoNasc_Found()
Message(mioArray[Me.sbxLuogoNasc.key][2])
End
...mi restutisce sempre l'ultimo record dell'Array, ossia l'ultimo CodiceIstat della lista della searchbox sbxLuogoNasc. :rolleyes:
Allora... premesso che ho detto un sacco di str.....e, forse perche' stavo per uscire dall'ufficio e ho letto velocemente il tuo post, ma anche tu! come fai ha prendermi sempre in parola :mad: ;D ;D ;D ;D
Stendiamo un velo pietoso su quello che ho scritto prima... io ero rimasto che tu avevi un file csv da caricare in un array... non avevo letto che l'hai caricato in un database...
Basta allora che fai in questo modo:
Private RecComuni as Result
Public Sub CaricoLista()
Dim Rec As Result
Dim Nx As Integer
RecComuni = MiaConn.Exec("Select * From Comuni;")
For Nx = 0 To RecComuni.Max
RecComuni.MoveTo(Nx)
Me.SearchBox1[Nx] = Rec["Comune"] & ", " & Rec["Provincia"]
Next
End
Public Sub SearchBox1_Found()
RecComuni.MoveTo(CInteger(Val(Me.SearchBox1.Key)))
Me.TextBox1.Text = Rec[quellochevuoi]
'ecc ecc ecc
End
Meglio che ti riscrivo tutto
Private RecComuni as Result
Public Sub CaricoLista()
Dim Nx As Integer
RecComuni = MiaConn.Exec("Select * From Comuni;")
For Nx = 0 To RecComuni.Max
RecComuni.MoveTo(Nx)
Me.SearchBox1[Nx] = RecComuni["Comune"] & ", " & RecComuni["Provincia"]
Next
End
Public Sub SearchBox1_Found()
RecComuni.MoveTo(CInteger(Val(Me.SearchBox1.Key)))
Me.TextBox1.Text = RecComuni[quellochevuoi]
'ecc ecc ecc
End
spero che questa sia l'ultima volta che riscrivo sto pezzo di codice.... mmiiiiii che palle
Private RecComuni as Result
Public Sub CaricoLista()
Dim Nx As Integer
RecComuni = MiaConn.Exec("Select * From Comuni;")
For Nx = 0 To RecComuni.Max
RecComuni.MoveTo(Nx)
Me.SearchBox1.List[Nx] = RecComuni["Comune"] & ", " & RecComuni["Provincia"]
Next
End
Public Sub SearchBox1_Found()
RecComuni.MoveTo(CInteger(Val(Me.SearchBox1.Key)))
Me.TextBox1.Text = RecComuni[quellochevuoi]
'ecc ecc ecc
End