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

DDX_ManagedControl ruft CWinFormsControl::CreateManagedControl auf, um ein Steuerelement zu erstellen, das der ID des Ressourcensteuerelements entspricht.Wenn Sie DDX_ManagedControl für ein CWinFormsControl-Steuerelement verwenden (in durch den Assistenten erstelltem Code), sollte CreateManagedControl nicht explizit für das gleiche Steuerelement aufgerufen werden.

Rufen Sie in CWnd::DoDataExchangeDDX_ManagedControl auf, um aus Ressourcen-IDs Steuerelemente zu erstellen.Für den Datenaustausch ist es nicht notwendig, die DDX/DDV-Funktionen mit Windows Forms-Steuerelementen zu verwenden.Stattdessen können Sie in der DoDataExchange-Methode der Dialog- oder Ansichtsklasse Code platzieren, um auf die Eigenschaften des verwalteten Steuerelements zuzugreifen. Dies wird im folgenden Beispiel erläutert.

Im folgenden Beispiel wird gezeigt, wie eine systemeigene C++-Zeichenfolge an ein .NET-Benutzersteuerelement gebunden wird.

Beispiel

Es folgt ein Beispiel einer DDX/DDV-Datenbindung einer MFC-Zeichenfolge m_str mit einer benutzerdefinierten NameText-Eigenschaft eines .NET-Benutzersteuerelements.

Das Steuerelement wird erstellt, wenn CMyDlg::DoDataExchange zum ersten Mal durch CDialog::OnInitDialog aufgerufen wird. Deshalb muss jeder Code, der auf m_UserControl verweist, nach dem DDX_ManagedControl-Aufruf platziert werden.

Sie können diesen Code in der MFC01-Anwendung implementieren, die Sie in Gewusst wie: Erstellen des Benutzersteuerelements und des Hosts in einem Dialogfeld 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;
};

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

Nun wird die Handlermethode für einen Klick auf die Schaltfläche OK hinzugefügt.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();
}

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 der Text im Textfeld beim Schließen der Anwendung in einem Popupmeldungsfeld angezeigt wird.

Siehe auch

Referenz

CWinFormsControl-Klasse

DDX_ManagedControl

CWnd::DoDataExchange