[英]how to get numeric value from edit control
除了已经提到的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中的文本,然后将其转换为数字类型, 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
如果您需要定期需要该功能,比如多个对话框,那么您也可以将自己的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.