如何实现在一个Edit框中,只能输入数字,不能输入字符? 在应用程序中经常需要输入诸如价格,重量等数字信息,所以如何实现在一个Edit框中,只能输入数字,不能输入字符, 就显得有点重要。在此,向各位大侠请教,能否给点sample Code? 不胜感激! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 see Masked Edit Controlhttp://www.codeproject.com/editctrl/maskededit.asp http://www.csdn.net/expert/topic/1067/1067777.xml?temp=.9051782看看这篇帖子吧 用VC编辑对话框时就可以实现啊?拖一个EDIT到对话框上,设置EDIT属性为,NUMBER,记得是第二个标签的左下角。如果是动态创建,CREATE函数,也可以指定 ES_NUMBER 这个属性。 拖一个EDIT到对话框上,设置EDIT属性为,NUMBER,记得是第二个标签的左下角。 我给你一个例子:如果不定义为CString,在输入时会碰上当全部删除时,会不停的弹出提示对话框,好的方法是自定义一个CEditEx类,将你的成员变量设置为CEditEx,class CEditEx public CEdit;在WM_KeyDown消息中处理Void CEditEx::OnKeyDown(UINT nChar,UINT nRepCnt,UINT uFlags){ if !isdigit(nChar) return;CEditEx::OnKeyDown(nChar, nRepCnt, uFlags);} 那就处理ONCHAR吧,void C*::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {if( ( nChar >= 0x30 && nChar <= 0x39 ) || nChar == 0x2E ) CEdit::OnChar(nChar, nRepCnt, nFlags); else return;} 派生新的edit类,改写下面的函数:void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default if(::isdigit(nChar)) { //make all the input characters are the digitals! CEdit::OnChar(nChar, nRepCnt, nFlags); }} 如果设定控件NUMBER属性的话将只能键入数字键,有时候不太合适。因此派生一个CEdit的子类,然后重载OnChar函数。由于键码1-26分别对应CtrlA-CtrlZ,因此需要允许编辑控制键,同时还要允许数字键和小数点。VC6.0调试通过。void CNumEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default if((nChar>0 && nChar<27) || // 允许控制字符如 Ctrl-C、Ctrl-V 等 ::isdigit(nChar) || nChar == (UINT)'.') CEdit::OnChar(nChar, nRepCnt, nFlags);}最后在自己的对话框中声明一个自己的编辑框变量,并将它与控件绑定。绑定方法有两种:1. 通过ClassWizard添加对应的CEdit变量,然后手工将.h头文件中的变量类型由CEdit改为CNumEdit即可。VS.net中还可以直接绑定自己定义的派生类CNumEdit,就不需要手工去改了。2. 直接手工添加CNumEdit变量到对话框,然后在重载对话框的 OnInitDialog函数,加入下面语句: CMyNumEditA.SubclassDlgItem(IDC_EDIT1,this); CMyNumEditB.SubclassDlgItem(IDC_EDIT2,this); void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Add your message handler code here and/or call default if(::isdigit(nChar)) { //only the digital, we send message! CEdit::OnChar(nChar,nRepCnt,nFlags); }} VC中如何编辑位图? VS2005中ActiveX控件的使用问题 帮我看看AT指令发送短消息的错误问题 VC 中为什么没有ttof DLL问题 怎么在一个Dialog上,加入ToolBar和Statusbar 文件关闭出错?? 高手请进 异地作项目要注意些什么? mschart控件在没有vc环境中无法使用, 请网管手下留情,我在自考,计算机系统结构考了两次还没过,没办法,只好在这里请教高手。 如何在基于对话框的程序里使用RichEdit控件?
Masked Edit Control
http://www.codeproject.com/editctrl/maskededit.asp
看看这篇帖子吧
拖一个EDIT到对话框上,设置EDIT属性为,NUMBER,记得是第二个标签的左下角。
如果是动态创建,CREATE函数,也可以指定 ES_NUMBER 这个属性。
如果不定义为CString,在输入时会碰上当全部删除时,会不停的弹出提示对话框,好的方法是自定义一个CEditEx类,将你的成员变量设置为CEditEx,
class CEditEx public CEdit;
在WM_KeyDown消息中处理Void CEditEx::OnKeyDown(UINT nChar,UINT nRepCnt,UINT uFlags)
{
if !isdigit(nChar)
return;
CEditEx::OnKeyDown(nChar, nRepCnt, uFlags);}
void C*::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if( ( nChar >= 0x30 && nChar <= 0x39 ) || nChar == 0x2E )
CEdit::OnChar(nChar, nRepCnt, nFlags);
else
return;}
void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if(::isdigit(nChar))
{
//make all the input characters are the digitals!
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
}
因此派生一个CEdit的子类,然后重载OnChar函数。
由于键码1-26分别对应CtrlA-CtrlZ,因此需要允许编辑控制键,
同时还要允许数字键和小数点。VC6.0调试通过。void CNumEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {
// TODO: Add your message handler code here and/or call default
if((nChar>0 && nChar<27) || // 允许控制字符如 Ctrl-C、Ctrl-V 等
::isdigit(nChar) || nChar == (UINT)'.')
CEdit::OnChar(nChar, nRepCnt, nFlags);
}最后在自己的对话框中声明一个自己的编辑框变量,并将它与控件绑定。绑定方法有两种:
1. 通过ClassWizard添加对应的CEdit变量,然后手工将.h头文件中的变量类型由CEdit改为CNumEdit即可。VS.net中还可以直接绑定自己定义的派生类CNumEdit,就不需要手工去改了。
2. 直接手工添加CNumEdit变量到对话框,然后在重载对话框的 OnInitDialog函数,加入下面语句:
CMyNumEditA.SubclassDlgItem(IDC_EDIT1,this);
CMyNumEditB.SubclassDlgItem(IDC_EDIT2,this);
{
// TODO: Add your message handler code here and/or call default
if(::isdigit(nChar))
{
//only the digital, we send message!
CEdit::OnChar(nChar,nRepCnt,nFlags);
}
}