方法: Windows フォームで DDX/DDV データ バインディングを実行する
DDX_ManagedControl は、CWinFormsControl::CreateManagedControl を呼び出し、リソースのコントロール ID と一致するコントロールを作成します。ウィザードで生成されたコードの CWinFormsControl コントロールに DDX_ManagedControl を使用する場合は、同じコントロールに対して CreateManagedControl を明示的に呼び出さないでください。
CWnd::DoDataExchange の DDX_ManagedControl を呼び出し、リソース ID からコントロールを作成します。データ交換の場合は、Windows フォーム コントロールで DDX/DDV 関数を使用する必要はありません。代わりに、次の例のように、ダイアログ (またはビュー) クラスの DoDataExchange メソッド内のマネージ コントロールのプロパティにアクセスするコードを配置できます。
ネイティブな C++ 文字列を .NET ユーザー コントロールにバインドする方法の例を次に示します。
使用例
.NET ユーザー コントロールのユーザー定義の NameText プロパティを使用した m_str という MFC 文字列の DDX/DDV データ バインディングの例を次に示します。
コントロールは、CDialog::OnInitDialog が最初に CMyDlg::DoDataExchange を呼び出したときに作成されます。そのため、m_UserControl を参照するコードは、DDX_ManagedControl 呼び出しの後に記述する必要があります。
このコードは、「方法: ダイアログ ボックスにユーザー コントロールおよびホストを作成する」で作成した MFC01 アプリケーションで実装できます。
CMFC01Dlg の宣言に、次のコードを配置します。
class CMFC01Dlg : public CDialog
{
CWinFormsControl<WindowsFormsControlLibrary1::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);
}
}
ここで、[OK] ボタンに、クリックのハンドラー メソッドを追加します。[リソース ビュー] タブをクリックします。[リソース ビュー] で、IDD_MFC01_DIALOG をダブルクリックします。リソース エディターにダイアログ リソースが表示されます。次に、[OK] ボタンをダブルクリックします。
次のように、ハンドラーを定義します。
void CMFC01Dlg::OnBnClickedOk()
{
AfxMessageBox(CString(m_MyControl.GetControl()->textBox1->Text));
OnOK();
}
BOOL CMFC01Dlg::OnInitDialog() の実装に次の行を追加します。
m_MyControl.GetControl()->textBox1->Text = "hello";
これにより、アプリケーションをビルドして実行できるようになります。アプリケーションの終了時にテキスト ボックス内のテキストがポップアップ メッセージとして表示されることに注意してください。