在应用程序中经常需要输入诸如价格,重量等数字信息,所以如何实现在一个Edit框中,只能输入数字,不能输入字符, 就显得有点重要。
在此,向各位大侠请教,能否给点sample Code? 不胜感激!

解决方案 »

  1.   

    see 
    Masked Edit Control
    http://www.codeproject.com/editctrl/maskededit.asp
      

  2.   

    http://www.csdn.net/expert/topic/1067/1067777.xml?temp=.9051782
    看看这篇帖子吧
      

  3.   

    用VC编辑对话框时就可以实现啊?
    拖一个EDIT到对话框上,设置EDIT属性为,NUMBER,记得是第二个标签的左下角。
    如果是动态创建,CREATE函数,也可以指定 ES_NUMBER 这个属性。
      

  4.   

    拖一个EDIT到对话框上,设置EDIT属性为,NUMBER,记得是第二个标签的左下角。
      

  5.   

    我给你一个例子:
    如果不定义为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);}
      

  6.   

    那就处理ONCHAR吧,
    void C*::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
    {
    if( ( nChar >= 0x30 && nChar <= 0x39 ) || nChar == 0x2E )
    CEdit::OnChar(nChar, nRepCnt, nFlags);
    else
               return;}
      

  7.   

    派生新的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);
      }
    }
      

  8.   

    如果设定控件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);
      

  9.   

    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);
      }
    }