PDA

Visualizza la versione completa : [vc++] aggiungere valori a CCombobox


teuccio
17-01-2005, 15:49
Ciao, ho un piccolo(grande) problema con vc++.


A runtime leggo i lavori di un file di testo e mi popolo un CStringArray con i valori del file di testo. Fin qui tutto ok.

Ho una CComboBox che voglio popolare con i valori di un CStringArray a run-time.

Non trovo il metodo di CComboBox per aggiungere dei nuovi valori.


Spero di essermi spiegato abbastanza bene!

Ciao!

unomichisiada
18-01-2005, 00:35
Scusa e questo (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_mfc_ccombobox.3a3a.addstring.asp) non va bene?

teuccio
18-01-2005, 15:12
uffi, non mi va...
mi dice dubug assertion faild.

Io ho usato il wizard per la creazione della variabile di controllo, ma poi ogni volta che uso nel codice questa variabile di controllo mi esce sempre debug assertion faild!

Nessuno sa dirmi dove sbaglio?

Ciao

unomichisiada
19-01-2005, 00:59
Guarda se ti da un debug assertion failed sicuramente ti indica anche in maniera precisa il file e la riga di esso a cui si è verificata quindi è suficiente che tu faccaia una ricerca di tale file nella cartella di Visual studio,lo apra,vada alla riga incriminata e controlli a cosa è dovuta.Generalmente avvengono quando si usano dei metodi grafici di controlli per cui è stato creato l'oggetto ma non è ancor stata creata la finestra corrispondente.Prova a vedere..

teuccio
19-01-2005, 14:08
sì, efettivamente mi da file riga, verificherò!

teuccio
19-01-2005, 14:52
ecco l'asserzione incriminata, ma che vuol dire?

AFXWIN_INLINE int CComboBox::AddString(LPCTSTR lpszString)
{ ASSERT(::IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, CB_ADDSTRING, 0, (LPARAM)lpszString); }

che devo fare per non farla fallire?

unomichisiada
19-01-2005, 16:12
E' prprio come ti ho già detto,stai chiamando un metodo di un controllo in un momento in cui la sua finestra non è ancora stata disegnata.Ad esempio se il ComBo appartiene ad un CDialog gli stai aggiungendo stringhe prima di richiamare DoModal().Cmq o mi posti più codice o non ti posso aiutare

teuccio
19-01-2005, 16:43
effettivamente io cerco di farla aggiungere nella initBox() che richiamo prima della doModal().

Come posso fare ad aggiungerlo dopo aver chiamato la DoModal()?

Quelle che mi viene in mente è fare l'override della funzione DoModal, richiamare quella di CDialog e poi aggiungere l'istruzione per aggiungere le opzioni alla CComboBox.
Solo che nn mi ricordo più cm si fa!! è una cazzata o potrebbe essere la strada?

Il codice se possibile preferirei nn postarlo eprchè è una mezza porcheria, fatta anni fa e che adesso sto riprendendo in mano!

unomichisiada
19-01-2005, 19:00
Originariamente inviato da teuccio
effettivamente io cerco di farla aggiungere nella initBox() che richiamo prima della doModal().

Come posso fare ad aggiungerlo dopo aver chiamato la DoModal()?

Quelle che mi viene in mente è fare l'override della funzione DoModal, richiamare quella di CDialog e poi aggiungere l'istruzione per aggiungere le opzioni alla CComboBox.
Solo che nn mi ricordo più cm si fa!! è una cazzata o potrebbe essere la strada?

Il codice se possibile preferirei nn postarlo eprchè è una mezza porcheria, fatta anni fa e che adesso sto riprendendo in mano!
Ci sono due possibilità:
1)Utilizzare le routines DDX di MFC appositamente create per risolvere questo tipo di problemi.In sostanza devi associare una variabile membro del dialogo al valore del controllo e poi richiamare UpdateData().

2)Ti dichiari nel dialogo un array di stringhe publico (o che puoi scrivere dall'esterno mediante apposito metodo) e nella initBox le stringhe le aggiungi a quello invece che direttamente al controllo,poi nella classe dialogo all'innterno di OnInitDialog vai a recuperare i valori memorizzati in quell'array e ci riempi il ComboBox.

Io userei la seconda.Ciao

teuccio
19-01-2005, 20:07
ecco come facevo!!!
usavo anche io la onInitDialog,
ma nella classe che ho creato (credo) attraverso il wizard non c'è la funzione onInitDialog.

Cosa posso fare? la creo io manualmente? e poi cm gli dico che deve partire finito di disegnare la finestra?


Oh, grazie mille per l'aiuto che mi stai dando.
Purtroppo ho usato vc++ solo per 1 progetto e a distanza di 2 anni mi ricordo ben poco!

Loading