Porady: wiązanie danych DDX/DDV za pomocą interfejsu Windows Forms
DDX_ManagedControlwywołania CWinFormsControl::CreateManagedControl do tworzenia formantu pasujące identyfikator formantu zasobu.Jeśli używasz DDX_ManagedControl dla CWinFormsControl formantu (w Kreatorze wygenerowany kod), nie należy wywoływać CreateManagedControl jawnie dla tego samego formantu.
Wywołanie DDX_ManagedControl w CWnd::DoDataExchange do tworzenia formantów z identyfikatorów zasobów.Do wymiany danych nie należy używać funkcji DDX/DDV z formantami Windows Forms.Zamiast tego, można umieścić kod, aby uzyskać dostęp do właściwości zarządzanego formantu w DoDataExchange metoda klasy okna dialogowego (lub widoku), jak w poniższym przykładzie.
Poniższy przykład pokazuje jak chcesz powiązać formant użytkownika .NET ciąg macierzystym C++.
Przykład
Poniżej znajduje się przykład wiązania danych ciąg MFC DDX/DDV m_str z przez użytkownika NameText właściwości formantu użytkownika .NET.
Formant nie zostanie utworzony po CDialog::OnInitDialog wywołania CMyDlg::DoDataExchange po raz pierwszy, tak aby kod odwołujący się m_UserControl musi następować po DDX_ManagedControl zadzwonić.
Ten kod można zaimplementować w aplikacji MFC01 został utworzony w Porady: tworzenie formantu użytkownika i hosta w oknie dialogowym.
W deklaracji z CMFC01Dlg, umieść następujący kod:
class CMFC01Dlg : public CDialog
{
CWinFormsControl<WindowsFormsControlLibrary1::UserControl1> m_MyControl;
CString m_str;
};
W wykonywaniu CMFC01Dlg, umieść następujący kod:
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);
}
}
Teraz dodamy metodę obsługi kliknij przycisk OK.Kliknij przycisk Widoku zasobów kartę.W widoku zasobów kliknij dwukrotnie na IDD_MFC01_DIALOG.Zasoby dialogowe pojawiają się w Edytor zasobów.Następnie dwukrotnie kliknij przycisk OK.
Definiuje obsługi w następujący sposób.
void CMFC01Dlg::OnBnClickedOk()
{
AfxMessageBox(CString(m_MyControl.GetControl()->textBox1->Text));
OnOK();
}
I Dodaj następujący wiersz do wykonania BOOL CMFC01Dlg::OnInitDialog().
m_MyControl.GetControl()->textBox1->Text = "hello";
Można teraz skompilować i uruchomić aplikację.Należy zauważyć, że dowolny tekst w polu tekstowym będą wyświetlane w oknie podręcznym komunikatu po zamknięciu aplikacji.