Dela via


Gör så här: Gör DDX/DDV-databindning med Windows Forms

DDX_ManagedControl anropar CWinFormsControl::CreateManagedControl för att skapa en kontroll som matchar resurskontroll-ID:t. Om du använder DDX_ManagedControl för en CWinFormsControl kontroll (i guidegenererad kod) bör du inte anropa CreateManagedControl uttryckligen för samma kontroll.

Anropa DDX_ManagedControl i CWnd::DoDataExchange för att skapa kontroller från resurs-ID:n. För datautbyte behöver du inte använda DDX/DDV-funktionerna med Windows Forms-kontroller. I stället kan du placera kod för att komma åt egenskaperna för den hanterade kontrollen i klassen DoDataExchange i dialogrutan (eller vyn), som i följande exempel.

I följande exempel visas hur du binder en inbyggd C++-sträng till en .NET-användarkontroll.

Exempel: DDX/DDV-databindning

Följande är ett exempel på DDX/DDV-databindning av en MFC-sträng m_str med den användardefinierade NameText egenskapen för en .NET-användarkontroll.

Kontrollen skapas när CDialog::OnInitDialog anropar CMyDlg::DoDataExchange för första gången, så all kod som refererar till m_UserControl måste komma efter DDX_ManagedControl-anropet.

Du kan implementera den här koden i MFC01-programmet som du skapade i Så här: Skapa användarkontroll och värd i en dialogruta.

Placera följande kod i deklarationen av CMFC01Dlg:

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

Exempel: Implementera DoDataExchange()

Placera följande kod i implementeringen av 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);
   }
}

Exempel: Lägg till hanteringsmetod

Nu ska vi lägga till hanteringsmetoden för ett klick på OK-knappen. Klicka på fliken Resursvy. Dubbelklicka på IDD_MFC01_DIALOGi Resursvyn. Dialogresursen visas i Resursredigeraren. Dubbelklicka sedan på OK-knappen.

Definiera hanteraren enligt följande.

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

Exempel: Ange textrutans text

Lägg till följande rad i implementeringen av BOOL CMFC01Dlg::OnInitDialog().

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

Nu kan du skapa och köra programmet. Observera att all text i textrutan visas i en popup-meddelanderuta när programmet stängs.

Se även

CWinFormsControl-klass
DDX_ManagedControl
CWnd::D oDataExchange