Partilhar via


Como: Fazer a vinculação de dados DDX/DDV com o Windows Forms

DDX_ManagedControl chama CWinFormsControl::CreateManagedControl para criar um controle correspondente à ID de controle de recurso. Se você usar DDX_ManagedControl para um controle de CWinFormsControl (em código gerado pelo assistente), você não deve chamá-CreateManagedControl explicitamente para o mesmo controle.

Chame DDX_ManagedControl em CWnd::DoDataExchange para criar controlos a partir de IDs de recursos. Para 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 sua classe de diálogo (ou exibição), como no exemplo a seguir.

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

Exemplo: ligação de dados DDX/DDV

A seguir está um exemplo de ligaçã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 criado em Como: Criar o controle de usuário e 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 manipulador

Agora vamos adicionar o método handler para um clique no botão OK. Clique no separador Vista de Recursos. Na Vista de Recursos, faça duplo clique em IDD_MFC01_DIALOG. O recurso de diálogo aparece no Editor de Recursos. Em seguida, clique duas vezes no botão OK.

Defina o manipulador da seguinte maneira.

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

Exemplo: Definir o texto da caixa de texto

E adicione a seguinte linha à implementação de 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.

Ver também

Classe CWinFormsControl
DDX_ManagedControl
CWnd::D oDataExchange