如何:使用 Windows 窗体执行 DDX/DDV 数据绑定
DDX_ManagedControl 调用 CWinFormsControl::CreateManagedControl 以创建与资源控件 ID 匹配的控件。 如果将 DDX_ManagedControl
用于 CWinFormsControl
控件(在向导生成的代码中),则不应为同一控件显式调用 CreateManagedControl
。
在 DDX_ManagedControl
中调用 以从资源 ID 创建控件。 对于数据交换,无需将 DDX/DDV 函数与 Windows 窗体控件一起使用。 相反,可以将用于访问托管控件的属性的代码置于对话框(或视图)类的 DoDataExchange
方法中,如以下示例所示。
以下示例演示如何将本机 C++ 字符串绑定到 .NET 用户控件。
示例:DDX/DDV 数据绑定
以下是 MFC 字符串 m_str
与 .NET 用户控件的用户定义 NameText
属性的 DDX/DDV 数据绑定示例。
当 CDialog::OnInitDialog 首次调用 CMyDlg::DoDataExchange
时,将创建控件,因此任何引用 m_UserControl
的代码都必须紧跟 DDX_ManagedControl
调用。
可以在如何:在对话框中创建用户控件和主机中创建的 MFC01 应用程序中实现此代码。
将以下代码置于 CMFC01Dlg 的声明中:
class CMFC01Dlg : public CDialog
{
CWinFormsControl<WindowsFormsControlLibrary1::UserControl1> m_MyControl;
CString m_str;
};
示例:实现 DoDataExchange()
将以下代码置于 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);
}
}
示例:添加处理程序方法
现在,我们将添加用于单击“确定”按钮的处理程序方法。 单击“资源视图”选项卡。在资源视图中,双击 IDD_MFC01_DIALOG
。 对话框资源随即显示在“资源编辑器”中。 然后双击“确定”按钮。
按如下所示定义处理程序。
void CMFC01Dlg::OnBnClickedOk()
{
AfxMessageBox(CString(m_MyControl.GetControl()->textBox1->Text));
OnOK();
}
示例:设置文本框文本
并将以下行添加到 BOOL CMFC01Dlg::OnInitDialog() 的实现中。
m_MyControl.GetControl()->textBox1->Text = "hello";
现在可以构建并运行应用程序。 请注意,当应用程序关闭时,文本框中的任何文本都将显示在弹出消息框中。