「MFCコントロール - コントロールの更新」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
編集の要約なし
編集の要約なし
 
(同じ利用者による、間の5版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
CWnd::UpdateData関数は、DDX/DDVサポートで値を更新するときに使う。<br>
<code>CWnd::UpdateData</code>メソッドは、DDX/DDVサポートで値を更新する場合に使用する。<br>
<br>
<br>
コントロールに入力された値を変数に格納する時に、UpdateData(TRUE)またはUpdateData()を呼ぶ。<br>
コントロールに入力された値を変数に格納する場合、<code>UpdateData(TRUE)</code>または<code>UpdateData()</code>を使用する。<br>
変数に格納された値をコントロールに反映する時は、UpdateData(FALSE)を呼ぶ。<br>
また、変数に格納された値をコントロールに反映する場合、<code>UpdateData(FALSE)</code>を使用する。<br>
<br><br>
<br><br>


== サンプルコード ==
== サンプルコード ==
  <source lang="c++">
以下の例では、まず、ボタンを押下した時、UpdateData()でIDC_EDIT1に入力された文字列を変数m_xvEdit1に格納している。<br>
  CMyDialog.h
次に、変数m_xvEdit1の文字列を変数m_xvEdit2にコピーして、UpdateData(FALSE)で変数m_xvEdit2の文字列をIDC_EDIT2に反映させている。<br>
[[ファイル:UpdateData 01.png|フレームなし|中央]]
<br>
  <syntaxhighlight lang="c++">
  // CMyDialog.h
class CMyDialog : public CDialogEx
{
// ...
   
   
  CString m_xvEdit1;
  private:
CString m_xvEdit2;
    CString m_xvEdit1;
</source>
    CString m_xvEdit2;
<source lang="c++">
CMyDialog.cpp
   
   
  CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/) : CDialog(CWndDlg::IDD, pParent), m_xvEdit1(_T("")), m_xvEdit2(_T(""))
// ...
};
</syntaxhighlight>
<br>
<syntaxhighlight lang="c++">
// CMyDialog.cpp
  CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/) : CDialog(CMyDialog::IDD, pParent), m_xvEdit1(_T("")), m_xvEdit2(_T(""))
  {
  {
     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
     m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
31行目: 43行目:
  void CMyDialog::OnBnClickedButton()
  void CMyDialog::OnBnClickedButton()
  {
  {
     // TODO: ここにコントロール通知ハンドラ コードを追加します。
     // UpdateData(TRUE)でDDX変数を更新
     UpdateData();           // UpdateData(TRUE)でDDX変数を更新
     UpdateData();
     m_xvEdit2 = m_xvEdit1;  // m_xvEdit1の内容をm_xvEdit2に代入
    UpdateData(FALSE);      // UpdateData(FALSE)でDDX変数の内容をコントロールに反映
    // m_xvEdit1の内容をm_xvEdit2に代入
     m_xvEdit2 = m_xvEdit1;
   
    // UpdateData(FALSE)でDDX変数の内容をコントロールに反映
    UpdateData(FALSE);
  }
  }
  </source>
  </syntaxhighlight>
[[ファイル:UpdateData 01.png|フレームなし|中央]]
<br>
まず、ボタンを押下したとき、UpdateData()でIDC_EDIT1に入力された文字列をm_xvEdit1に格納される。<br>
次に、m_xvEdit1をm_xvEdit2に代入する。<br>
最後に、UpdateData(FALSE)でm_xvEdit2の文字列をIDC_EDIT2に反映させる。<br>
<br>
<br>
'''実行例'''<br>
下図に、上記のサンプルコードの実行例を示す。<br>
IDC_EDIT1にABCDEを入力し、Button1を押すと、IDC_EDIT2に反映される。<br>
IDC_EDIT1にABCDEを入力し、Button1を押すと、IDC_EDIT2に反映される。<br>
[[ファイル:UpdateData 02.png|フレームなし|中央]]
[[ファイル:UpdateData 02.png|フレームなし|中央]]<br>
[[ファイル:UpdateData 03.png|フレームなし|中央]]
[[ファイル:UpdateData 03.png|フレームなし|中央]]
<br><br>
<br><br>

2021年1月29日 (金) 15:46時点における最新版

概要

CWnd::UpdateDataメソッドは、DDX/DDVサポートで値を更新する場合に使用する。

コントロールに入力された値を変数に格納する場合、UpdateData(TRUE)またはUpdateData()を使用する。
また、変数に格納された値をコントロールに反映する場合、UpdateData(FALSE)を使用する。


サンプルコード

以下の例では、まず、ボタンを押下した時、UpdateData()でIDC_EDIT1に入力された文字列を変数m_xvEdit1に格納している。
次に、変数m_xvEdit1の文字列を変数m_xvEdit2にコピーして、UpdateData(FALSE)で変数m_xvEdit2の文字列をIDC_EDIT2に反映させている。

UpdateData 01.png


 // CMyDialog.h
 class CMyDialog : public CDialogEx
 {
 // ...
 
 private:
    CString m_xvEdit1;
    CString m_xvEdit2;
 
 // ...
 };


 // CMyDialog.cpp
 
 CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/) : CDialog(CMyDialog::IDD, pParent), m_xvEdit1(_T("")), m_xvEdit2(_T(""))
 {
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
 }
 
 void CMyDialog::DoDataExchange(CDataExchange* pDX)
 {
    CDialog::DoDataExchange(pDX);
 
    DDX_Text(pDX, IDC_EDIT1, m_xvEdit1);
    DDX_Text(pDX, IDC_EDIT2, m_xvEdit2);
 }
 
 void CMyDialog::OnBnClickedButton()
 {
    // UpdateData(TRUE)でDDX変数を更新
    UpdateData();
 
    // m_xvEdit1の内容をm_xvEdit2に代入
    m_xvEdit2 = m_xvEdit1;
 
    // UpdateData(FALSE)でDDX変数の内容をコントロールに反映
    UpdateData(FALSE);
 }


下図に、上記のサンプルコードの実行例を示す。
IDC_EDIT1にABCDEを入力し、Button1を押すと、IDC_EDIT2に反映される。

UpdateData 02.png


UpdateData 03.png