方法: Windows フォームで DDX/DDV データ バインドを実行する

DDX_ManagedControl は、CWinFormsControl::CreateManagedControl を呼び出して、リソース コントロール ID に一致するコントロールを作成します。 (ウィザードで生成されたコードで) CWinFormsControl コントロールに対して DDX_ManagedControl を使用する場合、同じコントロールに対して CreateManagedControl を明示的に呼び出すことはしないでください。

CWnd::DoDataExchangeDDX_ManagedControl を呼び出して、リソース ID からコントロールを作成します。 データ交換の場合、Windows フォームコントロールで DDX/DDV 関数を使用する必要はありません。 代わりに、次の例のように、ダイアログ (またはビュー) クラスの 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);
   }
}

例: ハンドラー メソッドを追加する

次に、[OK] ボタンのクリックに対応するハンドラー メソッドを追加します。 [リソース ビュー] タブをクリックします。[リソース ビュー] で、IDD_MFC01_DIALOG をダブルクリックします。 リソース エディターにダイアログ リソースが表示されます。 その後、[OK] ボタンをダブルクリックします。

ハンドラーを次のように定義します。

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

例: textBox テキストを設定する

BOOL CMFC01Dlg::OnInitDialog() の実装に、次のコードを追加します。

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

アプリケーションをビルドして実行できる状態になりました。 アプリケーションが終了すると、テキスト ボックス内のテキストがポップアップ メッセージ ボックスに表示されます。

関連項目

CWinFormsControl クラス
DDX_ManagedControl
CWnd::D oDataExchange