Поделиться через


Практическое руководство. Привязка данных DDX/DDV к элементам управления Windows Forms

DDX_ManagedControl вызывает CWinFormsControl::CreateManagedControl, чтобы создать элемент управления, соответствующий идентификатору элемента управления ресурсами. Если вы используете DDX_ManagedControl для элемента управления (в созданном мастером CWinFormsControl коде), не следует явно вызывать CreateManagedControl для того же элемента управления.

Вызовите DDX_ManagedControl CWnd ::D oDataExchange для создания элементов управления из идентификаторов ресурсов. Для обмена данными не требуется использовать функции DDX/DDV с элементами управления Windows Forms. Вместо этого можно поместить код для доступа к свойствам управляемого элемента управления в DoDataExchange методе класса диалогового окна (или представления), как показано в следующем примере.

В следующем примере показано, как привязать собственную строку C++ к пользовательскому элементу управления .NET.

Пример: привязка данных DDX/DDV

Ниже приведен пример привязки данных DDX/DDV строки m_str MFC с определяемым NameText пользователем свойством пользовательского элемента управления .NET.

Элемент управления создается при первом вызове CMyDlg::DoDataExchange CDialog::OnInitDialog, поэтому любой код, который ссылается 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";

Теперь можно выполнить сборку и запуск приложения. Обратите внимание, что любой текст в текстовом поле будет отображаться во всплывающем окне сообщения при закрытии приложения.

См. также

Класс CWinFormsControl
DDX_ManagedControl
CWnd::D oDataExchange