Практическое руководство. Привязка данных DDX/DDV к элементам управления Windows Forms
Обновлен: Ноябрь 2007
DDX_ManagedControl вызывает метод CWinFormsControl::CreateManagedControl для создания элемента управления, соответствующего идентификатору элемента управления ресурса. Если функция DDX_ManagedControl используется для элемента управления CWinFormsControl (в коде, созданном мастером), не следует напрямую вызывать метод CreateManagedControl для этого же элемента управления.
Следует вызвать функцию DDX_ManagedControl в CWnd::DoDataExchange для создания элементов управления на основе идентификатора ресурса. Для обмена данными необязательно использовать функции DDX/DDV с элементами управления Windows Forms. Вместо этого можно разместить код для получения доступа к свойствам управляемого элемента управления в методе DoDataExchange класса диалогового окна (или представления), как в следующем примере.
В следующем примере показано, как выполнить привязку строки C++ к пользовательскому элементу управления .NET.
Пример
В следующем примере демонстрируется привязка данных DDX/DDV строки MFC m_str к определенному пользователем свойству NameText пользовательского элемента управления .NET.
Элемент управления создается, когда метод CDialog::OnInitDialog в первый раз вызывает метод CMyDlg::DoDataExchange, поэтому любой другой код, ссылающийся на элемент управления m_UserControl, должен располагаться после вызова DDX_ManagedControl.
Этот код можно реализовать в приложении MFC01, созданном в разделе Практическое руководство. Создание пользовательского элемента управления и ведущего приложения в диалоговом окне.
В разделе объявлений CMFC01Dlg добавьте следующий код:
class CMFC01Dlg : public CDialog
{
CWinFormsControl<WindowsControlLibrary1::UserControl1> m_MyControl;
CString m_str;
};
В разделе реализации 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";
Теперь можно выполнить построение и запуск приложения. Обратите внимание, что при закрытии приложения любой текст в текстовом поле отображается в всплывающем окне сообщения.