Autore Topic: [RISOLTO]Valorizzare gruppo di controlli  (Letto 797 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
[RISOLTO]Valorizzare gruppo di controlli
« il: 10 Marzo 2010, 10:09:10 »
E' un tema già affrontato, ma vorrei aggiungere una complicazione: modificare la proprietà CheckBox.value solamente di alcune delle checkBox del gruppo ed eventualmente valorizzare la Label.Text posta sulla stessa riga del CheckBox.value=TRUE, comandando tali impostazioni da un Form diverso da quello dove sono  definitio i controlli suddetti. Mi spiego meglio: i gruppi dei CheckBox e delle Label da manipolare sono dentro il Form5, mentre il lavoro di modifica delle proprietà dovrei svolgerlo in FMain, quando ho la disponibilità dei dati letti dal Database agganciato al programma.
Avevo pensato di arganizzare in Form5 un array dinamico, da leggere per la valoprizzazione in Form_Open di Form5.class:
Codice: [Seleziona]
PRIVATE $_TabNomi AS NEW String[]  
PRIVATE $_TabRiord AS NEW String[]
per valorizzarne i contenuti  da FMain.class, ma (riduco l'esempio solamente al primo dei due array) l'istruzione
 
Codice: [Seleziona]
Form5.TabNomi[i] = "causalifreq"
produce l'errore unknown symbol $_TabNomi in class Form5.
Allora ho pensato di agire sempre in FMain.class direttamente sul gruppo CheckBoxin questo modo:
Codice: [Seleziona]
FOR EACH Form5.ElSeleztab IN Form5.children
        IF NOT DB_Connection.Tables.Exist(Form5.ElSeleztab.Name) THEN   
            Form5.ElSeleztab.value = TRUE
        ENDIF
NEXT
ottenendo però l'errore Not an object
Essendo la prima esperienza nei confronti di un simile utilizzo, se qualche amico/a ha già affronatto detta tipologia e può darmi una mano ne sarò assai grato.
Ciao a tutti.
« Ultima modifica: 15 Marzo 2010, 22:50:10 da Picavbg »
:ciao:

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Valorizzare gruppo di controlli
« Risposta #1 il: 10 Marzo 2010, 12:50:49 »
Citazione
PRIVATE $_TabNomi AS NEW String[] 
PRIVATE $_TabRiord AS NEW String[]
con questa dichiarazione gli array soino visdibili solo all' interno del form dove li hai dichiarati.
per vederli da altri form devi dichiararli public

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Valorizzare gruppo di controlli
« Risposta #2 il: 10 Marzo 2010, 13:10:24 »
Citazione
PRIVATE $_TabNomi AS NEW String[] 
PRIVATE $_TabRiord AS NEW String[]
con questa dichiarazione gli array soino visdibili solo all' interno del form dove li hai dichiarati.
per vederli da altri form devi dichiararli public
Scusa l'imprecisione, ma non potevo indicare tutte le prove fatte. Ho rimesso la dichiarazione PUBLIC ed  è cambiato solo il messaggio, non la sostanza; infatti ora  ottengo l'errore Not an object .
Ciò potrebbe significare che l'array dinamico sia visibile in un'altra class solo dopo la sua prima valorizzazione. ::) Non saprei, cerco di darmi una spiegazione.
Ciao.
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Valorizzare gruppo di controlli
« Risposta #3 il: 11 Marzo 2010, 10:11:33 »
Ho modificato il codice che avevo scritto, abbandonando l'idea dell'array dinamico. Ho puntato invece la mia attenzione sul gruppo dim CheckBox che ho costruito nella Form5. Il nuvo codice è:
Codice: [Seleziona]
i = -1
    FOR EACH ElSeleztab.Name[i] IN Form5.Seleztab.Children
      o_DbNome = ElSeleztab.Name[i]
      FOR i = 0 TO 10
        IF NOT DB_Connection.Tables.Exist(o_DbNome) THEN      ' Verifica l'esistenza della Tabella puntata dal gruppo di CheckBox di Form5
              ElSeleztab.value[i] IN Form5.Seleztab.Children = TRUE
        ENDIF
        INC i
      NEXT
    NEXT
Ricevo l'errore:Unknown symbol 'SelezTab' in class  'Form5', cioè:
Codice: [Seleziona]
 FOR EACH ElSeleztab.Name[i] IN Form5.Seleztab.Children 
Per completezza di informazione, vorrei allegare l'immagine della Form5 in progettazione, ma,  con la nuova funzionalità del sito, non ne sono capace
Ciao a tutti.
« Ultima modifica: 11 Marzo 2010, 10:46:29 da Picavbg »
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Valorizzare gruppo di controlli
« Risposta #4 il: 15 Marzo 2010, 22:47:57 »
Penso di avere capito. Perciò cerco di sintetizzare il problema e la rispettiva soluzione.
Dovendo caricare dati e  settare attributi di prorpietà di oggetti interni ad una una FormX, dormiente, prima ancora di richiamarla col classico metodo .show, potrebbe risultare conveniente agire, per comodità di programmazione, nella stessa Form.class chiamante. Ho letto qualche discussione in merito, ma tutte quelle riscontrate riguardano applicazioni di soluzioni nell'ambito della stessa Formx.class. Io cercavo invece un'applicazione risolutiva per gli oggetti della FormX, ma dentro la FormW.class. Partendo da un esempio di md9327, ho sviluppato il seguente ragionamento:
Se la FormX in questione contiene 5 ogggetti CheckBox  e che debba modificare sia la prioprietà value che la proprietà enabled, a seconda del contenuto di un elemento della riga di una tabella di un DB-SQLite, ho scritto il seguente codice:
 
Codice: [Seleziona]
PUBLIC SUB Form_Open()
 1. DIM DB_Connection AS NEW Connection   'inizializza la nuova connessione
 2. DIM CONST $DbNome AS String = "DbDati"
 3. DIM $DbPath AS String

 4. DIM oElemTabDb AS Object
 5. DIM oObjFormX AS Object[]    'array di puntamento agli oggetti della FormX identificati sotto lo stesso GROUP

 6. DIM RecTab AS Result

 7. oObjFormX.Add(FormX.CheckBox1)        'caricamento nell'array dei puntamenti al gruppo oggetti della FormX  da manipolare
 8. oObjFormX.Add(FormX.CheckBox2)    'caricamento nell'array dei puntamenti al gruppo oggetti della FormX  da manipolare
 9. oObjFormX.Add(FormX.CheckBox3)  'caricamento nell'array dei puntamenti al gruppo oggetti della FormX  da manipolare
10. oObjFormX.Add(FormX.CheckBox4)  'caricamento nell'array dei puntamenti al gruppo oggetti della FormX  da manipolare
11. oObjFormX.Add(FormX.CheckBox5)         'caricamento nell'array dei puntamenti al gruppo oggetti della FormX  da manipolare

12. $DbPath Application.Path & "/Dati_DB"
13. WITH DB_Connection
14.     .Type = "sqlite3"
15.     .Host = VarGlob.$DbPath
16.     .Name = VarGlob.$DbNome
17.     .Open
18. END WITH
19. RecTab = Connection.Tables.Begin("TabDatiDb")
20. FOR EACH RecTab
21.    FOR EACH oElemTabDb IN oObjFormX 'per ciascun degli elementi di puntamento "oElemTabDb" contenuti nell'array "oObjFormX"
22. IF oElemTabDb.text = "RecTab!Elem1 THEN
23.        o_ElNumInstab.enabled = TRUE 'rende attivo il checkBox
24.     ENDIF
25.    NEXT
26. NEXT
END

Leggendo il codice compreso fra la riga 20 e la 23, si ottiene il seguente ragionamento:
20.:  per ciascuna riga letta dalla Tabella del DB in 'RecTab'
21.:  e per ciascun elemento di puntamento "oElemTabDb" contenuto nell'array "oObjFormX"
22.:  qualora il campo Elem1 di RecTab contenga lo stasso valore che contiene la proprietà della checKBox.Text, puntata nello stresso istante, dall'elemento di puntamento "oElemTabDb"
23.:  allora,  la propietà enabled di quella checkBox viene modificata in TRUE. Ciò avviene sempre atraverso l'elemento di puntamento "oElemTabDb".
Spero di essere riuscito ad esprimere il concetto correttamente.  :D
Ciao a tutti.
:ciao: