Autore Topic: combobox  (Letto 1211 volte)

Offline robertozr

  • Gamberetto
  • *
  • Post: 22
    • Mostra profilo
combobox
« il: 27 Dicembre 2008, 12:36:34 »
buon giorno a tutti,
ho un form con una combobox che all'apertura viene popolata con un dato proveniente dal database( ps: select nel form open)
dopo cio attivando il click della combo ho necessita di accodare al dato precedente
l'elenco della tabella interessata.io l'eseguo in questo modo:

Codice: [Seleziona]
PUBLIC SUB Form_Open()  result = MGlobal.db.Exec("select record from tabella where record ='mio_dato'")
FOR EACH result combobox.add(result!mio_dato)
NEXT
END


Codice: [Seleziona]
PUBLIC SUB combobox_Click()
combobox.Clear
result = MGlobal.db.Exec("select miei_dati from tabella ")
FOR EACH result
combobox.add(result!miei_dati)
NEXT
END

Cosi non funziona
Se metto lo stesso codice che ho messo in combobox_click in un button è ok

Saluti.................

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: combobox
« Risposta #1 il: 28 Dicembre 2008, 20:11:12 »
A parte il fatto che l'istruzione "combobox.Clear" ti cancella tutti i dati precedentemente caricati nella combo, l'evento "click" si attiva quando tu cambi l'item presente nella combo con un'altro della lista.
Non sò se è il caso si usare questa logica...
Ad ogni modo, dato che sei all'interno di un evento dello stesso oggetto, prova a fare un Refresh() della combo, al termine del popolamento.
In fase di Open della form, questo viene fatto in automatico, ma non è detto che funzioni in runtime.

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: combobox
« Risposta #2 il: 28 Dicembre 2008, 20:46:50 »
Se ho capito bene la tua richiesta, come ti ha detto md9327 sicuramente il codice che hai postato non puo' darti il risultato che tu ti aspetti, prova in questo modo, ho fatto delle prove, ripeto, posto che abbia capito bene, dovrebbe risolvere il tuo problema:

Codice: [Seleziona]

PRIVATE xResult AS Result
PUBLIC SUB Form_Activate()
DIM Result AS Result
Load_combo
ComboBox1_Click
Result = conn.db.Exec("SELECT record FROM tabella WHERE record ='mio_dato'")
ComboBox1.Text = Result!mio_dato
END

PUBLIC SUB Load_combo()
xResult = conn.db.Exec("SELECT tutti_dati FROM tabella")
FOR EACH xResult
ComboBox1.Add(xResult!tutti_dati)  
NEXT
END

PUBLIC SUB ComboBox1_Click()
xResult.MoveFirst
xResult.MoveTo(ComboBox1.Index)
END


Il codice inserito nella ComboBox1_Click ti può essere utile se per esempio devi associare il dato selezionato nella Combo ad una variabile o altro, altrimenti puoi ometterlo.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: combobox
« Risposta #3 il: 28 Dicembre 2008, 22:29:02 »
Scusa tornu, ma xchè usi l'evento Activate ?
a parte il problem ain oggetto, questo evento viene scatenato ogni qualvolta la form viene resa attiva, ovvero passa in primo piano; l'uso di questo evento provoca il continuo refresh degli oggetti, e oltre ad essere fastidioso, può provocare blocchi incontrollati.

Ovviamente, il mio è solo un suggerimento... :-P

Riguardo al problema, il suggerimento sull'uso di una funzione a parte, è un'ottima cosa.

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: combobox
« Risposta #4 il: 28 Dicembre 2008, 23:20:41 »
Giusta osservazione la tua, anche perchè rileggendo il post di robertozr lui usa l'evento Open, e se non dico una inesattezza si attiva solo all'apertura del Form.
I tuoi suggerimenti sono sempre bene accetti.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: combobox
« Risposta #5 il: 29 Dicembre 2008, 00:30:19 »
Il problema non è nel codice dell'evento Form_Open(), se ho capito bene, ma nel codice dell'evento ComboBox_Click() che, a detta dell'amico, non viene eseguito.

Non so dire perché non va, però a 'sto punto mi viene da pensare che sia un problema di implementazione. Magari, vedendo tutto il codice completo del form e non solo quei 2 spezzoni, possiamo aiutarti meglio.
Visita il mio sito personale: http://www.leonardomiliani.com

Offline tornu

  • Gran Maestro dei Gamberi
  • *****
  • Post: 855
    • Mostra profilo
Re: combobox
« Risposta #6 il: 29 Dicembre 2008, 14:45:21 »
La mia risposta era riferita all'osservazione di md9327, sono d'accordo con te che il problema di robertozr è nel codice dell'evento ComboBox_Click() (se non abbiamo capito male), ma come ha detto md9327 il click sull'evento viene eseguito su un elemento della lista e non sul click che apre la combo (spero di essermi spiegato ...).Sempre se non ho capito male, robertozr vorrebbe eseguire il codice che inserisce all'interno dell'evento non quando sceglie un'elemento della lista ma al click che apre la combo, con la soluzione che gli ho proposto ottiene questo risultato, se questo non fosse il problema che ha posto, lo può dire solo lui.... altrimenti ho capito "aglio per cipolla".....

P.S.: penso di aver capito bene visto che robertozr dice di mettere lo stesso codice in un evento Button_Click e il tutto funziona. Quindi il suo problema come ho detto non è eseguire il codice sul click che seleziona un elemento dalla lista ma sul click che "apre" la combo.
Il software è come il sesso, è meglio quando è libero. (Linus Torvalds)

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: combobox
« Risposta #7 il: 29 Dicembre 2008, 19:12:03 »
Infatti la mia era solo una piccola osservazione al codice postato da tornu, ma non ha nulla a che fare con il problema in oggetto.

A dir la verità, non ho ben capito cosa il nostro amico vuole ottenere... sarà l'età... :-)

Scherzi a parte, come ha accennato leo, non si capisce se il problema è l'evento stesso che non viene scatenato (cosa molto strana...), oppure che il codice all'interno di questo non viene eseguito, o eseguito in maniera anomala (altrettanto strano).

Quello che vorrei capire, a prescindere la lettura del codice, è se la combo deve essere popolata da un qualche evento alieno al controllo, o altra cosa.
Nella seconda ipotesi, "l'altra cosa...", allora non capisco la logica di popolare se stessa (la combo), quando si scatena un suo evento.
Come ha scritto tornu "se ho capito bene...", mi pare strana l'applicazione di una tal logica.
L'idea che mi sono fatto, è che, in base ad una serie di cose, aliene alla combo, determinino il popolamento della stessa, magari in base alla selezione di qualche cosa; questo "qualche cosa" ricerca una serie di informazioni dal database, e di conseguenza và a riempire la lista della combo. La selezione di un elemento di questa lista poi farà qualcos'altro...

Comunque, urge una migliore spiegazione, da parte del nostro amico, di cosa veramente vuole fare!

Offline robertozr

  • Gamberetto
  • *
  • Post: 22
    • Mostra profilo
Re: combobox
« Risposta #8 il: 01 Gennaio 2009, 15:32:31 »
un buon anno a tutti,dunque dopo un po' di bagordi vari vi ringrazio delle risposte e suggerimenti vari ho risolto. Per specificare cosa volevo ottenere, era
questo: avevo un form che leggendo un result me la doveva associare a un combobox
ma con la necessita' di potere poi tramite il click della combo cambiarla e associarla ad un variabile per poi fare una modifica alla tabella

Nella prima select che mi popola la combo ho aggiunto
CmbFor1_Click
    load_combo
CmbFor1.text = faResult!foragsoc(combo in questione)
ho poi aggiunto

PUBLIC SUB load_combo()
 
 DIM xResult AS Result
xResult = MGlobal.db.Exec("SELECT foragsoc,cdfor FROM anafor")
FOR EACH xResult
cmbfor1.Add(xResult!foragsoc)  
NEXT  

PUBLIC SUB CmbFor1_Click()
   $idcdfor = CmbFor1.index
nel click per associare la variabile  

END

Saluti a tutti