如何从编辑控件获取数值

问题描述 投票:0回答:3

抱歉,如果这太微不足道了,但我不知道如何将数值输入到编辑控件中。 MFC 编辑控件由 CEdit 类表示。

谢谢你。

c++ windows mfc
3个回答
21
投票

除了已经提到的

GetWindowText
方法之外,您还可以通过
DDX
将其绑定到
integer
/
unsigned integer
/
double
/
float
值。试试这个:

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
变量 - 已更正。所以我为那些喜欢可读性的人提出了一个想法。因为我总是对哪个调用执行哪个方向感到困惑,所以您可以引入一个枚举以使其更具可读性,就像这样(可能在 stdafx.h 或某些中央标头中):

enum UpdateDataDirection
{
    FromVariablesToControls = FALSE,
    FromControlsToVariables = TRUE
}

你只需要写:

UpdateData(FromVariablesToControls);

UpdateData(FromControlsToVariables);

10
投票

CEdit 派生自 CWnd,因此它有一个名为

GetWindowText
的成员函数,您可以调用该函数来获取 CEdit 中的文本,然后将其转换为数字类型,
int
double
- 取决于您的内容期望用户输入:

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

2
投票

如果您经常需要该功能,例如在多个对话框中,那么您也可以子类化您自己的 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。您可以扩展它以具有可定制的下限和上限以及小数位设置。

© www.soinside.com 2019 - 2024. All rights reserved.