Autore Topic: [RISOLTO]Evento LostFocus per ComboBox.Group  (Letto 805 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
[RISOLTO]Evento LostFocus per ComboBox.Group
« il: 19 Gennaio 2011, 15:45:57 »
Dentro una Form ho dichiarato le ComboBox  in essa presenti come appartenenti ad una ComboBox.Group.
Ogni volta che eseguo il click su un'altra delle ComboBox, si scatena normalmente l'evento LostFocus relativo alla precdente utilizzata, mentre se eseguo il click su un oggetto grafico diverso (CheckBox, TextBox, Button,...) l'evento LostFocus legato alla ComboBox.Group precedente non viene assolutamente schedulato. Posso allora benissimo richiamarlo io, però, così facendo vengono persi tutti i riferimenti "LAST" alla ComboBox.Group.
Esiste un metodo per restituire detti riferimenti (LAST.List, LAST.Text, LAST.Add)?
il mio Gambas é la versione 2.19
 :( :(
« Ultima modifica: 24 Gennaio 2011, 15:04:09 da Picavbg »
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Evento LostFocus per ComboBox.Group
« Risposta #1 il: 21 Gennaio 2011, 18:19:02 »
Avrei risolto in questo modo:
Dichiarazione di due variabili object, fra quelle della Form di pertinenza, per indirizzarle alle ComboBox.Group:
Codice: [Seleziona]
PRIVATE o_ElCmbVoCo AS NEW Object[]    'permette il puntamento agli elementi del gruppo di oggetti ComboVociCont presenti nel Form
PRIVATE o_CmbVociCont AS Object

Scrittura di una routine di puntamento dei nuovi oggetti alle ComboBox.Group:
Codice: [Seleziona]
PUBLIC SUB CarPuntVociCo()     'Procedura di caricamento della Tabella dei puntamenti ad alcune ComboBox della Form
    o_ElCmbVoCo.Add(ME.VoContCas)
    o_ElCmbVoCo.Add(ME.VoSotCtoCas)
    o_ElCmbVoCo.Add(ME.VoCoPriColleg)
    o_ElCmbVoCo.Add(ME.VoCoSecColleg)
    o_ElCmbVoCo.Add(ME.VoSotCtoColleg)
END

Richiamo della routine appena descritta dentro il metodo new_ della Form:
Codice: [Seleziona]
PUBLIC SUB _new()  
'--------------- bla bla bla --------------------
  CarPuntVociCo
'--------------- bla bla bla --------------------
END

Tutti gli oggetti diversi da ComboBox.Group richiamano la ComboBoxGroup_LostFocus per assicurarne l'esecuzione:
Codice: [Seleziona]
[code]PUBLIC SUB SetCoVoce_Click()
'--------------- bla bla bla --------------------
    CmbVociCont_LostFocus
'--------------- bla bla bla --------------------
END[/code]

La procedura  CmbVociCont_LostFocus  fa riferimento alle proprietà delle ComboBox.Group, non più direttamente, ma indirettamente, tramite gli oggetti di puntamento o_CmbVociCont, o_ElCmbVoCo :
Codice: [Seleziona]
PUBLIC SUB CmbVociCont_LostFocus()
'--------------- bla bla bla --------------------
 FOR EACH o_CmbVociCont IN o_ElCmbVoCo
          i += 1
          IF o_CmbVociCont.tag = $_UltCmbVoCo
              i_IndComBox = i
              IF o_CmbVociCont.text <> ""
                IF $_NuoVoxCto <> ""
                  IF o_CmbVociCont.text <> $_NuoVoxCto THEN
                      FOR i = 0 TO o_CmbVociCont.count - 1
                          IF o_CmbVociCont.List[i_IndComBox - 1] = $_NuoVoxCto THEN
                              $_NuoVoxCto = o_CmbVociCont.text     'prepara il caricamento della nuova voce digitata
                              o_CmbVociCont.Remove(i_IndComBox - 1)              'l'istruzione remove altera anche il contenuto della CombBox.Text
                              o_CmbVociCont.text = $_NuoVoxCto      'restituisce alla CombBox.Text la nuova digitazione
                          ENDIF
                      NEXT
                      o_CmbVociCont.Add(o_CmbVociCont.text)
                  ENDIF
                ELSE
                  $_NuoVoxCto = o_CmbVociCont.text
                  o_CmbVociCont.Add(o_CmbVociCont.text)
                  o_CmbVociCont.text = $_NuoVoxCto      'restituisce alla CombBox.Text la nuova digitazione
                ENDIF
              ELSE
                IF $_NuoVoxCto <> "" THEN
                    FOR i = 0 TO o_CmbVociCont.count - 1
                        IF o_CmbVociCont.List[i_IndComBox] = $_NuoVoxCto THEN
                            o_CmbVociCont.Remove(i_IndComBox)              'l'istruzione remove altera anche il contenuto della CombBox.Text
                        ENDIF
                    NEXT
                ENDIF
              ENDIF
          ENDIF
      NEXT
'--------------- bla bla bla --------------------
END
:yeah:

In mancanza di altre soluzioni, l'ho provata e funziona. Certamente, gli amanti del rigore strutturale di Gambas non approveranno, ma le mie conoscenze non mi permettono di fare altro.
 ;D ;D

Saluti.
:ciao: