我想让用户在CEdit中输入的数据为FLOAT型,否则弹出MessageBox错误提示。
不用为其加数据变量的方法验证,想自己用函数验证,可不成功
GetDlgItemText(IDC_EDIT_TEST,&strTemp);
fltTemp=atof(strTemp);
可当CEDIT中的数据含有非数字时,strTemp中的内容是对的,可fltTemp总是为0该如何编写,使CEdit中的数据只能为FLOAT型,否则要用户重填
不用为其加数据变量的方法验证,想自己用函数验证,可不成功
GetDlgItemText(IDC_EDIT_TEST,&strTemp);
fltTemp=atof(strTemp);
可当CEDIT中的数据含有非数字时,strTemp中的内容是对的,可fltTemp总是为0该如何编写,使CEdit中的数据只能为FLOAT型,否则要用户重填
解决方案 »
- ActiveX控件问题!求高手指导。
- CFormView初始化CTabCtrl控件,与tap关联的对话框不显示
- 关于等待窗口的问题
- 数据库封装
- VC++ VISIO二次开发问题,急!!!!!!!!!
- 有关psapi.h的连接出错 -- error LNK2001: unresolved external symbol
- 我的MFC AppWizard - Step 6对话框中Base Class的CHtmlView怎么没有了????
- 如何在CHtmlView里显示自己的html代码
- 关于自定义消息函数的问题
- 一个很简单的问题!!50美金!
- 用Static控件显示随机数有时候没有显示是怎么回事?
- vc.net 是否兼容vc6?Win2000下能否安装vc.net?好不好用?
你应该检测字符串中的每一个字符。看一看有没有小数点对应的字符和有没有数字以外的字符。
{
GetDlgItemText(IDC_EDIT_TEST,&strTemp);
fltTemp=atof(strTemp);
return true;
}
catch(...)
{
::AfxMessageBox("Error")
return false;
}
这样就可以了
什么函数可以得出其长度和求出知道位置的单个字符呢
加入你自己的逻辑判断,就可以完美的解决了!
想实现什么样的逻辑规则都可以!
呵呵!!!!
---------------------------派生一个CEdit的类,添加一个成员变量CString strDigital;
---------------------------------------------
CFloatEdit:public CEdit
{...
public:
CString strDigital;
};
void CFloatEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if(::isdigit(nChar))
CEdit::OnChar(nChar, nRepCnt, nFlags);
else if(nChar=='.')//is '.'
{
int pos=strDigital.Find('.');
if(pos==-1&&!strDigital.IsEmpty())//only receives first '.' and not at first position of the string
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
else if(nChar==VK_BACK||nChar==VK_DELETE)//make sure to edit it!
CEdit::OnChar(nChar, nRepCnt, nFlags);
GetWindowText(strDigital);
}
至于怎么代替,那就随你的便了!
因为我如果这样做还不如直接加变量,进行数据验证呢因为我的对话框上有169个CEDIT,所以不可能重载的