方法: Windows フォームで DDX/DDV データ バインドを実行する
DDX_ManagedControl は、CWinFormsControl::CreateManagedControl を呼び出して、リソース コントロール ID に一致するコントロールを作成します。 (ウィザードで生成されたコードで) CWinFormsControl
コントロールに対して DDX_ManagedControl
を使用する場合、同じコントロールに対して CreateManagedControl
を明示的に呼び出すことはしないでください。
CWnd::DoDataExchange で DDX_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