• 限制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;

                       }

             }

    }

  • 相关阅读:
    idea打包jar的多种方式,用IDEA自带的打包形式,用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包,用Maven插件maven-assembly-plugin打包
    SSH Secure Shell 无法登录:server responded "algorithm negotiation failed”
    redis.clients.jedis.HostAndPort
    spring boot jar 进程自动停止,自动终止,不能后台持续运行
    剑指Offer_46_孩子们的游戏(圆圈中最后剩下的数)
    剑指Offer_45_扑克牌顺子
    剑指Offer_44_翻转单词顺序列
    剑指Offer_43_左旋转字符串
    剑指Offer_42_和为S的两个数字
    剑指Offer_41_和为S的连续正数序列
  • 原文地址:https://www.cnblogs.com/luoshupeng/p/2174289.html
Copyright © 2020-2023  润新知