Procedura: eseguire associazioni dati DDX/DDV con Windows Form

DDX_ManagedControl chiama CWinFormsControl::CreateManagedControl per creare un controllo che corrisponde all'ID del controllo della risorsa.Se si utilizza DDX_ManagedControl per un controllo CWinFormsControl (in un codice generato mediante procedura guidata), CreateManagedControl non deve essere chiamato in modo esplicito per lo stesso controllo.

Chiamare DDX_ManagedControl in CWnd::DoDataExchange per creare dei controlli da ID risorsa.Per lo scambio dei dati non è necessario utilizzare le funzioni DDX/DDV con i controlli Windows Form.Si può invece inserire codice per accedere alle proprietà del controllo gestito nel metodo DoDataExchange della classe delle finestre di dialogo o delle visualizzazioni, come indicato nell'esempio seguente.

Nell'esempio riportato di seguito viene illustrato come associare una stringa C++ nativa a un controllo utente .NET.

Esempio

Di seguito viene riportato un esempio di associazione dati DDX/DDV di una stringa MFC m_str con la proprietà NameText definita dall'utente di un controllo utente .NET.

Il controllo viene creato quando CDialog::OnInitDialog chiama CMyDlg::DoDataExchange per la prima volta. L'eventuale codice che fa riferimento a m_UserControl deve quindi essere scritto dopo la chiamata a DDX_ManagedControl.

È possibile implementare questo codice nell'applicazione MFC01 creata in Procedura: creare il controllo utente e inserirlo in una finestra di dialogo.

Inserire il codice seguente nella dichiarazione di CMFC01Dlg:

class CMFC01Dlg : public CDialog
{
   CWinFormsControl<WindowsFormsControlLibrary1::UserControl1> m_MyControl;
   CString m_str;
};

Inserire il codice seguente nell'implementazione di CMFC01Dlg:

void CMFC01Dlg::DoDataExchange(CDataExchange* pDX)
{
   CDialog::DoDataExchange(pDX);
   DDX_ManagedControl(pDX, IDC_CTRL1, m_MyControl);

   if (pDX->m_bSaveAndValidate) {
      m_str = m_MyControl->textBox1->Text;
   } else
   {
      m_MyControl->textBox1->Text = gcnew System::String(m_str);
   }
}

A questo punto verrà aggiunto il metodo di gestione di un clic sul pulsante OK.Scegliere la scheda Visualizzazione risorse.In Visualizzazione risorse fare doppio clic su IDD_MFC01_DIALOG.La finestra di dialogo verrà visualizzata nell'editor risorse.Fare doppio clic sul pulsante OK.

Definire il gestore nel modo riportato di seguito.

void CMFC01Dlg::OnBnClickedOk()
{
   AfxMessageBox(CString(m_MyControl.GetControl()->textBox1->Text));
   OnOK();
}

Aggiungere inoltre la seguente riga all'implementazione di BOOL CMFC01Dlg::OnInitDialog().

   m_MyControl.GetControl()->textBox1->Text = "hello";

A questo punto è possibile compilare ed eseguire l'applicazione.Si noti che il testo nella casella di testo verrà visualizzato in una finestra di messaggio popup alla chiusura dell'applicazione.

Vedere anche

Riferimenti

Classe CWinFormsControl

DDX_ManagedControl

CWnd::DoDataExchange