Condividi tramite


Procedura: eseguire associazioni dati DDX/DDV con Windows Form

Aggiornamento: novembre 2007

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<WindowsControlLibrary1::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

CWinFormsControl Class

DDX_ManagedControl

CWnd::DoDataExchange