zoukankan      html  css  js  c++  java
  • 限制CEdit 只输入小数的两种方法

    两种方法均来自互联网,仅为了收录

    方法一:

    新建一个类并且继承类CEdit,重写消息WM_CHAR

    添加代码:

    void CDoubleEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)

    {

             // TODO: 在此添加消息处理程序代码和/或调用默认值

             CString strEdit;

             GetWindowText(strEdit);

             int length=strEdit.GetLength();

             int pos=strEdit.Find('.');

             //8是退格,是小数点,具体参考键盘常用ASCII

             if((nChar>=48 && nChar<=57) || nChar==46 || nChar==8)

             {

                       if(nChar==8)

                       {

                                CEdit::OnChar(nChar, nRepCnt, nFlags);

                                return;

                       }

                       if(((length-pos)<=2 && pos!=-1 && nChar!=46) || pos==-1 )

                       {

                                CEdit::OnChar(nChar, nRepCnt, nFlags);

                       }

             }

    }

    方法二:

    添加CEditON_CHANGE事件

    代码如下:

    void CDlgTestDlg::OnEnChangeEdit2()

    {

             // TODO: 如果该控件是RICHEDIT 控件,它将不

             // 发送此通知,除非重写CDialog::OnInitDialog()

             // 函数并调用CRichEditCtrl().SetEventMask()

             // 同时将ENM_CHANGE 标志运算到掩码中。

             // TODO: 在此添加控件通知处理程序代码

             CString csAreaS;

             GetDlgItem( IDC_EDIT2 )->GetWindowText( csAreaS );

             // 只允许输数据

             int nStringLength = csAreaS.GetLength();

             int nDotCount = 0;

             // 点字符不能多于个

             for ( int nIndex = 0; nIndex < nStringLength; nIndex++ )

             {

                       if ( csAreaS[ nIndex ] == '.' )

                       {

                                nDotCount++;

                                if ( nDotCount > 1 )

                                {

                                         CString csTmp;

                                         csTmp = csAreaS.Left( nIndex );

                                         csTmp += csAreaS.Right( csAreaS.GetLength() - nIndex - 1 );

                                         //csRadius = csRadius.Left( nIndex + 1 ) + csRadius.Right( nStringLength - ( nIndex + 1 ) - 1 );

                                         GetDlgItem( IDC_EDIT2 )->SetWindowText( csTmp );

                                         return;

                                }

                       }

             }

             // 不允许输入数字和点以外的字符

             for ( int nIndex = 0; nIndex < nStringLength; nIndex++ )

             {

                       if ( csAreaS[ nIndex ] != '.' && ( csAreaS[ nIndex ] > '9' || csAreaS[ nIndex ] < '0' ) )

                       {

                                csAreaS = csAreaS.Left( nIndex ) + csAreaS.Right( csAreaS.GetLength() - nIndex - 1 );

                                GetDlgItem( IDC_EDIT2)->SetWindowText( csAreaS );

                                return;

                       }

             }

    }

  • 相关阅读:
    程序中转站
    数据结构与算法题!(总索引)
    C语言常用函数-isdigit()判断字符是否为十进制数字函数
    C语言常用函数-iscntrl()判断字符是否为控制字符函数
    C语言常用函数-isalpha()判断字符是否为英文字母函数
    C语言常用函数-isalnum()判断字符是否为字母或数字函数
    C语言常用函数-isascii()判断字符是否为ASCII码函数
    NX二次开发-在NX状态区显示一行文本UF_UI_set_status
    NX二次开发-UFUN在NX提示区显示一行文本UF_UI_set_prompt
    NX二次开发-调NX的dxfdwg.exe转换器导出dxf,dwg
  • 原文地址:https://www.cnblogs.com/luoshupeng/p/2174289.html
Copyright © 2011-2022 走看看