Gewusst wie: DDX-/DDV-Datenbindung mit Windows Forms

DDX_ManagedControl ruft CWinFormsControl::CreateManagedControl auf, um ein Steuerelement zu erstellen, das der Ressourcensteuerelement-ID entspricht. Wenn Sie für ein CWinFormsControl Steuerelement (im vom Assistenten generierten Code) verwendenDDX_ManagedControl, sollten Sie nicht explizit für dasselbe Steuerelement aufrufenCreateManagedControl.

Rufen Sie DDX_ManagedControl in CWnd::D oDataExchange auf, um Steuerelemente aus Ressourcen-IDs zu erstellen. Für den Datenaustausch müssen Sie die DDX/DDV-Funktionen nicht mit Windows Forms-Steuerelementen verwenden. Stattdessen können Sie Code für den Zugriff auf die Eigenschaften des verwalteten Steuerelements in der DoDataExchange Methode Ihrer Dialogklasse (oder Ansicht) platzieren, wie im folgenden Beispiel gezeigt.

Das folgende Beispiel zeigt, wie eine systemeigene C++-Zeichenfolge an ein .NET-Benutzersteuerelement gebunden wird.

Beispiel: DDX/DDV-Datenbindung

Im Folgenden sehen Sie ein Beispiel für die DDX/DDV-Datenbindung einer MFC-Zeichenfolge m_str mit der benutzerdefinierten NameText Eigenschaft eines .NET-Benutzersteuerelements.

Das Steuerelement wird erstellt, wenn CDialog::OnInitDialog zum ersten Mal aufgerufen CMyDlg::DoDataExchange wird, sodass alle Code, der verweise m_UserControl , nach dem DDX_ManagedControl Aufruf erfolgen müssen.

Sie können diesen Code in der MFC01-Anwendung implementieren, die Sie in How to: Create the User Control and Host in a Dialog Box erstellt haben.

Fügen Sie den folgenden Code in die Deklaration von CMFC01Dlg ein:

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

Beispiel: Implementieren von DoDataExchange()

Fügen Sie den folgenden Code in die Implementierung von CMFC01Dlg ein:

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);
   }
}

Beispiel: Hinzufügen einer Handlermethode

Nun fügen wir die Handlermethode für einen Klick auf die Schaltfläche "OK" hinzu. Klicken Sie auf die Registerkarte "Ressourcenansicht ". Doppelklicken Sie in der Ressourcenansicht auf IDD_MFC01_DIALOG. Die Dialogressource wird im Ressourcen-Editor angezeigt. Doppelklicken Sie dann auf die Schaltfläche "OK".

Definieren Sie den Handler wie folgt.

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

Beispiel: Festlegen des TextBox-Texts

Fügen Sie der Implementierung von BOOL CMFC01Dlg::OnInitDialog() die folgende Zeile hinzu.

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

Sie können die Anwendung jetzt erstellen und ausführen. Beachten Sie, dass text im Textfeld in einem Popupmeldungsfeld angezeigt wird, wenn die Anwendung geschlossen wird.

Siehe auch

CWinFormsControl-Klasse
DDX_ManagedControl
CWnd::D oDataExchange