首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MFC Edit Control 綁定變量後取值為空:缺少 UpdateData(TRUE) 的經典錯誤

     編輯:程式設計綜合問答

問題現象

Dialog 中多個 Edit Control 通過 Class Wizard 綁定 CString 變量(DDX_Text),按鈕事件中讀取變量值均為空字符串。

根本原因

MFC 的 DDX(對話框數據交換)機制不會自動將控件內容同步到變量。必須在讀取前調用 UpdateData(TRUE)(控件 → 變量),寫入後調用 UpdateData(FALSE)(變量 → 控件)。

修正代碼

void CAddBookDlg::OnBnClickedOk()
{
    UpdateData(TRUE); // 關鍵:從控件獲取數據到變量
    // 現在 m_bookName, m_Writer 等已有用戶輸入的值
    CString sql;
    sql.Format(_T("INSERT INTO Books VALUES ('%s', '%s', ...)"), m_bookName, m_Writer);
    // ... 執行 SQL
    UpdateData(FALSE); // 如需清空或回顯
    CDialogEx::OnOK();
}

常見誤區

  • 以為綁定後變量自動同步(屬性頁/數據綁定機制不同)。
  • 在 OnInitDialog 中調用 UpdateData(FALSE) 初始化控件,卻忘記讀取時調 TRUE。
  • 混淆 DDX_Text(文本框)與 DDX_Control(控件指針),後者需 GetWindowText 手動取值。

最佳實踐

  • 养成習慣:讀取前必寫 UpdateData(TRUE)。
  • 大量控件時,可封裝 GetDlgData() / SetDlgData() 統一調用。
  • 輸入驗證放在 OnOK 中 UpdateData(TRUE) 後進行,失敗則 return 不關閉對話框。

參考資料

博客園 MFC UpdateData 詳細講解。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved