Siccome non sono riuscito a trovare un qualcosa per scombinare da codice questo benedetto ordine dei controlli in un form, ho fatto una piccola classe statica che da la possibilità appunto di riordinare a piacimento il focus degli oggetti da codice...
La classe si chiama Sequence ed e' una classe di tipo statica.
Si utilizza in questo modo:
Nella Sub _new, o nell'evento Form_Open:
Sequence[ME].Move(ControlName As String, Optional Previous As String)
Il controllo precedente,se non viene dichiarato, fa passare l'oggetto alla prima posizione.
Es. (compreso nei sorgenti):
With Sequence[Me]
.Move(Me.SpinBox1.Name)
.Move(Me.TextBox1.Name, Me.SpinBox1.Name)
.Move(Me.Button2.Name, Me.TextBox1.Name)
.Move(Me.Button1.Name, Me.Button2.Name)
.Move(Me.TextBox2.Name, Me.Button1.Name)
End With
naturalmente non si e' obbligati a rifare completamente la gerarchia, ma si puo' solamente spostare quello che serve
Ho aggiunto anche qualche altra diavoleria per gestire la classe:
Sequence[Me].AddIgnoreClass(ClassName As String) Questa sub serve a escludere dalla gerarchia tutti gli oggetti che fanno parte di una medesima classe genitore. Di default (come in Gambas d'altronde) ho gia escluso Label, TextLabel e tutti i tipi di contenitori.
Sequence[Me].AddKey(Key As Integer, Optional Back As Boolean) Questo metodo serve ad aggiungere Key.code che fanno spostare il focus degli oggetti. L'opzione Back settata a True fe retrocedere il Focus (vedi BackTab)
Property Enabled As Boolean Settata di default a True. Se False abilita la gerarchia originale del Form.
Spero che a qualcuno possa servire