Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [MFC] Controllo di una form

    Ciao a tutti,
    ho creato, tramite la creazione automatica, una form MFC con all'interno alcune editbox e alcune combobox. Mi sono quindi stati creati il relativo file .cpp e il file.h.
    Ho la necessità di aprire questa form da un'altra classe, quello che faccio è creare l'oggetto form e chiamare la funzione DoModal().
    Se però da questa mia classe tento di accedere al contenuto della mia form, ottengo degli errori, ad esempio quando tento di aggiungere una stringa alla combobox.
    Purtroppo non ho esperienza con MFC.
    Grazie.
    Enigma

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    postare gli errori e il codice che usi per interagire con gli oggetti potrebbe essere un buon inizio per poterti aiutare..

  3. #3
    Supponiamo io abbia i file MyForm.h e MyForm.cpp, creati in automatico, all'interno di questa form ho una combobox chiamata IDC_COMBO_PROVA. Ho poi creato una variabile:
    codice:
    CComboBox combo_prova;
    //{{AFX_DATA_MAP(CModifyOem)
    	DDX_Control(pDX, IDC_COMBO_PROVA, combo_prova);
    //}}AFX_DATA_MAP
    Ora supponiamo che sia in un'altra classe, voglia creare e visualizzare questa form:
    codice:
    MyForm* prova = new MyForm();
    prova->DoModal();
    In questo modo la form mi viene visualizzata correttamente. Supponiamo io adesso voglia aggiungere una stringa alla combo, in questo modo:
    codice:
    prova->combo_prova.AddString(_T("contenuto"));
    Ciò che ottengo è un'errore in fase di esecuzione.
    Spero di essere stato più chiaro, in caso contrario chiedete pure.
    Grazie.
    Enigma

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Penso che il problema sia perche'

    combo_prova

    non e' pubblica ma privata.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Originariamente inviato da oregon
    Penso che il problema sia perche'

    combo_prova

    non e' pubblica ma privata.
    No, in realtà quella variabile è public. Infatti non ottengo nessun errore in fase di compilazione, ma solo in fase di esecuzione. Per la precisione: "Debug Assertion Filed!"
    Non riesco proprio a capire, grazie.
    Enigma

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E' possibile che tu aggiungi la stringa quando ancora l'oggetto non e' stato creato (da cui il suo hwnd e' nullo e quindi l'ASSERT ...).
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Originariamente inviato da oregon
    E' possibile che tu aggiungi la stringa quando ancora l'oggetto non e' stato creato (da cui il suo hwnd e' nullo e quindi l'ASSERT ...).
    Come posso controllare questa cosa?
    Grazie.
    Enigma

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non la devi controllare, la devi evitare.

    Comunque, la mia era solo un'ipotesi ... se non dici dove esegui l'inserimento (o non dai qualche informazione in piu' sull'ASSERT), non si puo' dire molto altro ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Originariamente inviato da oregon
    Non la devi controllare, la devi evitare.

    Comunque, la mia era solo un'ipotesi ... se non dici dove esegui l'inserimento (o non dai qualche informazione in piu' sull'ASSERT), non si puo' dire molto altro ...
    No intendevo come controllare se il problema era quello.
    L'inserimento lo faccio dopo aver creato l'oggetto:
    codice:
    MyForm* prova = new MyForm();
    prova->combo_prova.AddString(_T("inserimento"));
    prova->DoModal();
    L'errore lo ottengo appunto durante l'inserimento.
    Grazie.
    Enigma

  10. #10
    Altra cosa, se invece di una combobox ho una editbox il tutto funziona, ad esempio:
    codice:
    MyFrame* prova = new MyFrame();
    prova->campo = _T("prova");
    prova->DoModal();
    Dove:
    codice:
    CString campo = _T("");
    //{{AFX_DATA_MAP(CModifyOem)
    	DDX_Text(pDX, IDC_EDIT_CAMPO, campo);
    //}}AFX_DATA_MAP
    Non capisco...
    Enigma

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.