簡體   English   中英

如何從編輯控件中獲取數值

[英]how to get numeric value from edit control

很抱歉,如果這太簡單了,但我無法弄清楚如何將數值輸入編輯控件。 MFC編輯由CEdit類表示的控件。

謝謝。

除了已經提到的GetWindowText方法之外,您還可以通過DDX將其綁定到整數/無符號整數/雙/浮點值。 試試這個:

void CYourAwesomeDialog::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT_NUMBER, m_iNumber);
}

而m_iNumber是您的CYourAwesomeDialog類的成員。

你必須打電話

UpdateData(TRUE);

為了將控件中的值寫入變量。 呼叫

UpdateData(FALSE);

反過來做 - 從控件中的變量。

編輯(獎金):

在重新閱讀我的答案后,我注意到UpdateData(...)需要一個BOOL變量 - 已更正。 所以我對那些喜歡可讀性的人有了一個想法。 因為我總是混淆哪個調用指向哪個方向,所以你可以引入一個enum來使它更具可讀性(就像在stdafx.h或某個中心頭文件中):

enum UpdateDataDirection
{
    FromVariablesToControls = FALSE,
    FromControlsToVariables = TRUE
}

你只需要寫:

UpdateData(FromVariablesToControls);

要么

UpdateData(FromControlsToVariables);

CEdit派生自CWnd,因此它有一個名為GetWindowText的成員函數,您可以調用它來獲取CEdit中的文本,然后將其轉換為數字類型, intdouble - 具體取決於您希望用戶輸入的內容:

CString text;
editControl.GetWindowText(text);

//here text should contain the numeric value
//all you need to do is to convert it into int/double/whatever

如果您需要定期需要該功能,比如多個對話框,那么您也可以將自己的CEdit派生類子類化,以進行獲取,設置和驗證工作。

class CFloatEdit : public CEdit
{
public:
    CFloatEdit();
    void SetValue(double v) {
        // format v into a string and pass to SetWindowText
        }
    double GetValue() {
        // validate and then return atoi of GetWindowText
        }
    void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {
        // only allow digits, period and backspace
        }
};

這樣的事情,確保消息映射將所有其他消息傳遞給父CEdit。 您可以將其擴展為具有可自定義的下限和上限以及小數位設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM