Partilhar via


Como fazer a associação de dados DDX/DDV aos Windows Forms

O DDX_ManagedControl chama CWinFormsControl::CreateManagedControl para criar um controle que corresponda à ID do controle de recurso. Se você usar DDX_ManagedControl para um controle CWinFormsControl (no código gerado pelo assistente), não deverá chamar CreateManagedControl explicitamente para o mesmo controle.

Chame DDX_ManagedControl em CWnd::D oDataExchange para criar controles a partir de IDs de recurso. Para a troca de dados, você não precisa usar as funções DDX/DDV com controles Windows Forms. Em vez disso, você pode colocar código para acessar as propriedades do controle gerenciado no método DoDataExchange da classe de diálogo (ou modo de exibição), como no exemplo a seguir.

O exemplo a seguir mostra como associar uma cadeia de caracteres C++ nativa a um controle de usuário do .NET.

Exemplo: associação de dados DDX/DDV

Veja a seguir um exemplo de associação de dados DDX/DDV de uma cadeia de caracteres MFC m_str com a propriedade NameText definida pelo usuário de um controle de usuário .NET.

O controle é criado quando CDialog::OnInitDialog chama CMyDlg::DoDataExchange pela primeira vez, portanto, qualquer código que faça referência a m_UserControl deve vir após a chamada DDX_ManagedControl.

Você pode implementar esse código no aplicativo MFC01 que você criou em Como criar o controle de usuário e o host em uma caixa de diálogo.

Coloque o seguinte código na declaração de CMFC01Dlg:

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

Exemplo: Implementar DoDataExchange()

Coloque o seguinte código na implementação do 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);
   }
}

Exemplo: adicionar método do manipulador

Agora, adicionaremos o método do manipulador para um clique no botão OK. Clique na guia Modo de Exibição de Recursos. No Modo de Exibição de Recursos, clique duas vezes em IDD_MFC01_DIALOG. O recurso de caixa de diálogo é exibido no Editor de Recursos. Em seguida, clique duas vezes no botão OK.

Defina o manipulador da maneira a seguir.

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

Exemplo: Definir o texto textBox

Adicione então o código a seguir à implementação do BOOL CMFC01Dlg::OnInitDialog().

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

Agora você pode compilar e executar o aplicativo. Observe que qualquer texto na caixa de texto será exibido em uma caixa de mensagem pop-up quando o aplicativo for fechado.

Confira também

Classe CWinFormsControl
DDX_ManagedControl
CWnd::DoDataExchange