MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
MFCコントロール - DDVのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
MFCコントロール - DDV
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == DDV (Dialog Data Validation) は、MFCアプリケーションにおけるユーザ入力データの検証機能である。<br> MFCアプリケーションにおけるデータ検証の基盤として、ユーザインターフェースを支援する機能である。<br> <br> DDX (Dialog Data eXchange) と密接に連携して動作しており、データの整合性と有効性を確保する。<br> <br> DDVの仕組みでは、<code>UpdateData(TRUE)</code>メソッドを実行した (コントロールからメンバ変数にデータが転送される) 場合に、指定された検証ルールに基づいてデータの妥当性がチェックされる。<br> 検証に失敗した場合は、自動的にエラーメッセージが表示されて、該当のコントロールにフォーカスが設定される。<br> <br> 検証機能として、数値の範囲、文字列の長さ、必須入力等が組み込まれている。<br> 例えば、<code>DDV_MinMaxInt</code>は整数値の範囲を検証、<code>DDV_MaxChars</code>は文字列の最大長を制限する。<br> <br> また、カスタム検証ロジックを実装することも可能であり、アプリケーション固有の複雑な検証要件にも対応できる。<br> カスタム検証ロジックは、<code>DoDataExchange</code>メソッド内で独自の検証関数を呼び出す、あるいは、条件分岐を使用して実装する。<br> <br> エラーハンドリングにおいては、DDVは例外を使用してバリデーションの失敗を通知するため、try-catch句を使用して例外を処理することができる。<br> これにより、エラーメッセージを提供する、あるいは、特定の状況下での代替処理を実装することが可能になる。<br> <br> また、DDVはフォーム全体の検証も可能であり、UpdateDataメソッドの実行時に全ての検証ルールが順番にチェックされて、1つでも失敗すると処理が中断される。<br> これにより、データの一貫性を確保して、不正なデータがアプリケーション内部に入り込むのを防ぐことができる。<br> <br><br> == 文字列の長さ == <syntaxhighlight lang="c++"> void CMyDialog::DoDataExchange(CDataExchange *pDX) { CDialog::DoDataExchange(pDX); // 文字列の長さに検証例 (5文字以上20文字以下) DDX_Text(pDX, IDC_EDIT_NAME, m_strName); DDV_MaxChars(pDX, m_strName, 20); DDV_MinChars(pDX, m_strName, 5); } </syntaxhighlight> <br><br> == 数値範囲の検証 == <syntaxhighlight lang="c++"> void CMyDialog::DoDataExchange(CDataExchange *pDX) { CDialog::DoDataExchange(pDX); // 数値範囲の検証例 (0〜120) DDX_Int(pDX, IDC_EDIT_AGE, m_nAge); DDV_MinMaxInt(pDX, m_nAge, 0, 120); // 浮動小数範囲の検証例 (0.0〜1000000.0) DDX_Text(pDX, IDC_EDIT_SALARY, m_dSalary); DDV_MinMaxDouble(pDX, m_dSalary, 0.0, 1000000.0); } </syntaxhighlight> <br><br> == カスタム検証 == <syntaxhighlight lang="c++"> void AFXAPI DDV_EmailAddress(CDataExchange* pDX, const CString& value) { // コントロールからデータを取得する場合のみチェック if (pDX->m_bSaveAndValidate) { // 簡易的なメールアドレス確認 if (value.Find('@') == -1 || value.Find('.') == -1) { AfxMessageBox(_T("有効なメールアドレスを入力してください")); pDX->Fail(); // バリデーション失敗 } } } void CMyDialog::DoDataExchange(CDataExchange *pDX) { CDialog::DoDataExchange(pDX); // カスタムバリデーション 1 DDX_Text(pDX, IDC_EDIT_EMAIL, m_strEmail); DDV_EmailAddress(pDX, m_strEmail); // 必須入力チェック DDX_Text(pDX, IDC_EDIT_REQUIRED, m_strRequired); if (pDX->m_bSaveAndValidate && m_strRequired.IsEmpty()) { AfxMessageBox(_T("この項目は必須です")); pDX->Fail(); } // カスタムバリデーション 2 DDX_Text(pDX, IDC_EDIT_DATA, m_strData); if (pDX->m_bSaveAndValidate) { // カスタム検証ロジック if (!IsValidFormat(m_strData)) { AfxMessageBox(_T("データ形式が不正です")); pDX->Fail(); } } } </syntaxhighlight> <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:MFC]]
MFCコントロール - DDV
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse