Comment : établir la liaison des données DDX/DDV avec Windows Forms
DDX_ManagedControl appelle CWinFormsControl::CreateManagedControl pour créer un contrôle correspondant à l'ID du contrôle de ressource. Si vous utilisez DDX_ManagedControl pour un contrôle CWinFormsControl (dans le code généré par l'Assistant), n'appelez pas CreateManagedControl explicitement pour le même contrôle.
Appelez DDX_ManagedControl dans CWnd::DoDataExchange pour créer des contrôles d'ID de ressource. Pour l'échange de données, vous ne devez pas utiliser les fonctions DDX/DDV avec les contrôles Windows Forms. À la place, vous pouvez placer le code pour accéder aux propriétés du contrôle managé dans la méthode DoDataExchange de votre classe de dialogue (ou vue), comme dans l'exemple suivant.
L'exemple suivant montre comment lier une chaîne C++ native à un contrôle utilisateur .NET.
Exemple
Les éléments suivants sont un exemple de liaison de données DDX/DDV d'un m_str de chaîne MFC avec la propriété NameText définie par l'utilisateur d'un contrôle utilisateur .NET.
Le contrôle est créé lorsque CDialog::OnInitDialog appelle CMyDlg::DoDataExchange pour la première fois, afin que tout code qui référence m_UserControl se produise après l'appel DDX_ManagedControl.
Vous pouvez implémenter ce code dans l'application MFC01 que vous avez créée dans Comment : créer le contrôle utilisateur et l'héberger dans une boîte de dialogue.
Insérez le code suivant dans la déclaration de CMFC01Dlg :
class CMFC01Dlg : public CDialog
{
CWinFormsControl<WindowsFormsControlLibrary1::UserControl1> m_MyControl;
CString m_str;
};
Insérez le code suivant dans l'implémentation de 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);
}
}
Nous allons maintenant ajouter la méthode de gestionnaire en cliquant sur le bouton OK. Cliquez sur l'onglet Affichage des ressources. Dans Affichage des ressources, double-cliquez sur IDD_MFC01_DIALOG. La ressource de boîte de dialogue apparaît dans l'Éditeur de ressources. Double-cliquez ensuite sur le bouton OK.
Définissez le gestionnaire comme suit.
void CMFC01Dlg::OnBnClickedOk()
{
AfxMessageBox(CString(m_MyControl.GetControl()->textBox1->Text));
OnOK();
}
Et ajoutez la ligne suivante à l'implémentation de BOOL CMFC01Dlg::OnInitDialog ().
m_MyControl.GetControl()->textBox1->Text = "hello";
Vous pouvez maintenant générer et exécuter l'application. Notez que le texte contenu dans la zone de texte s'affiche dans un message contextuel à la fermeture de l'application.