在MFC中,项目需要对编辑框EditControl的数字输入范围进行限制,主要有以下实现方式,各有优缺点,个人推荐最后一个。

第一种:添加变量

为编辑框添加int、float变量的时候,可以填写最大值与最小值;或者自己添加代码DDV_MinMaxInt(pDX, m_nNum, 1, 65535);

测试发现:

只有在UpdateData(true)更新变量之后,才会对该变量的值进行判断,并弹出对话框提醒。

但仅仅是提醒,关闭提示框之后,错误数据仍会显示在编辑框上。

注意:无UpdateData(true),无判断提示。

第二种:控件的EN_KillFocus事件(失去焦点事件)

当失去焦点时候,UpdateData(true),同步一下窗体和相关变量的值,这样子系统才能正确判断是否超过设定的范围。

代码如下:

void CParaConfigDlg::OnEnKillfocusReceivergain()
{
UpdateData(true);
if ((m_nReceiverGain<) || (m_nReceiverGain>))
{
MessageBoxA(_T("数值超过范围!"), _T("错误"), MB_OK);
}
}

有一种说法是:只要你输入的值不在设定范围里,那么你的焦点就不能离开控件,因为会一直弹窗提示的。

但经过我实际测试了下,发现弹框结束后焦点是离开的,这个只是在失去焦点时进行的一次判断,超出则提示。

当然在这里我们可以进行如下更改:

void CParaConfigDlg::OnEnKillfocusReceivergain()
{
UpdateData(true);
if ((m_nReceiverGain<) || (m_nReceiverGain>))
{
MessageBoxA(_T("数值超过范围!"), _T("错误"), MB_OK);
(CEdit*)GetDlgItem(IDC_ReceiverGain)->SetFocus(); //设置焦点
}
}

这样就能保持不输入正确格式,焦点就不能离开控件。包括关闭,取消等按钮点击事件。

看了别人的文章,这里可能会有一个问题:

程序用户可能在输入之后没有让编辑框失去焦点,而是直接按回车键进入下一步操作,那么本文上面所说的则会有问题。

第三种:控件的EN_CHANGE事件(文本更改以后显示更新事件

代码都一样,同上。

这里的问题是:这个事件也是在文本改变后进行判断提示,关闭提示后,你改变其他参数,不会再次触发,因为你没有再改变。

即:改变一次,触发一次。

第四种:控件的EN_UPDATE事件(控件即将显示更改的文本事件)

代码都一样,同上。

这里的问题是:这个事件也是在文本即将显示时进行判断提示,关闭提示后,你改变其他参数,不会再次触发,因为你没有需要再显示。

即:需要显示一次,触发一次。

第五种:自己完善的(个人推荐)

EN_KillFocus事件为例:

void CParaConfigDlg::OnEnKillfocusReceivergain()
{
float aa = m_nReceiverGain;
UpdateData(true);
if ((m_nReceiverGain<) || (m_nReceiverGain>))
{
MessageBoxA(_T("数值超过范围!"), _T("错误"), MB_OK);
m_nReceiverGain = aa;
UpdateData(false);
}
}

主要是添加了历史数据保存,如果数据不合法,则还原原始数据。

特别提醒下:这种方法我使用过程中发现EN_UPDATE(),EN_CHANGE()事件有些问题。

例如以EN_UPDATE()为例:数字范围为12-76,我想输入26,那么开始输入2时就会报错,导致输入不了其他值。或者已经为26,我想改为36,也会导致6删除不了。

EN_CHANGE事件应该也会有类似的问题,同理。自己理解下这个思想,自己进行变通就行了。

因此该方法最好使用EN_KillFocus失去焦点事件。

参考:http://www.cnblogs.com/ziwuge/archive/2011/11/15/2249541.html

[MFC] 编辑框 EditControl 输入数字范围限制的更多相关文章

  1. MFC编辑框换行实现

    MFC中换行实现 在mfc中编辑框允许输入多行时,换行符被表示为<归位><换行>即“\r\n”,用ascii码表示为13 10 如果为编辑框中想要输入换行,就请将编辑框的属性: ...

  2. js限制文本框只能输入数字方法小结

    有时需要限制文本框输入内容的类型,本节分享下正则表达式限制文本框只能输入数字.小数点.英文字母.汉字等代码. 例如,输入大于0的正整数  代码如下: <input onkeyup="i ...

  3. js限制文本框只能输入数字方法小结(转)

    这篇文章主要分享下js代码限制文本框中只能输入数字的多个实例,学习下js控制文本框中输入数字的方法,需要的朋友可以参考下   有时需要限制文本框输入内容的类型,本节分享下正则表达式限制文本框只能输入数 ...

  4. C# 使用js正则表达式,让文本框只能输入数字和字母,最大长度5位

    使用js正则表达式,让文本框只能输入数字和字母,最大长度5位,只需要加个onkeyup事件,即可简单实现 <asp:TextBox ID="txtBegin" runat=& ...

  5. 用Jquery控制文本框只能输入数字和字母

    用Jquery控制文本框只能输入数字和字母 $.fn.onlyNum = function () { $(this).keypress(function (event) { var eventObj ...

  6. js限制文本框只能输入数字

    JS判断只能是数字和小数点1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'') ...

  7. 监听SWT文本框只能输入数字

    在SWT开发中,很多时候需要文本框只能输入数字(当输入字母或者其他字符时为无效),这个时候需要给文本框设置监听VerifyListener, code 如下: text.addVerifyListen ...

  8. JQuery 限制文本框只能输入数字和小数点

    $(function(){ /*JQuery 限制文本框只能输入数字*/ $(".NumText").keyup(function(){ $(this).val($(this).v ...

  9. js设置文本框只能输入数字

    JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'' ...

随机推荐

  1. Bootstrap 导航

    在本文中,您将学习如何使用 Bootstrap 工具包来创建基于导航.标签.胶囊式标签的导航. 基于标签的导航 nav nav-tabs <!DOCTYPE html> <html ...

  2. ASP.NET MVC 中的视图生成

    关于 ASP.NET MVC 中的视图生成 在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Mode ...

  3. iOS基础 - 相片浏览器

    一.需求分析 点击照片从当前照片位置动画弹出新的视图控制器显示选中的照片,新的视图控制器为全屏显示,背景为黑色,再次点击照片动画缩小至当前选中的照片位置,双击放大照片,如果已经放大则缩小,在新的视图控 ...

  4. VMware NAT方式 CentOS 6.8配置静态IP

    一.打开虚拟机设置,配置网络连接,如下图 二.编辑 /etc/sysconfig/network,以配置网关 vim /etc/sysconfig/network NETWORKING=yes HOS ...

  5. Bootstrap3.0入门学习系列

    Bootstrap3.0入门学习系列规划[持续更新]   前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...

  6. 图解Javascript之Function

    好东西分享给大家,但要尊重事实!!!因此特别说明:本图非我本人亲自所作,乃我大天朝网友所绘制.个人感觉此图,覆盖全面,细节考虑甚周全,因此分享给大家,同时在此特别感谢网友的无私分享!

  7. github开源项目

    开源一小步,前端一大步   作为一名前端攻城狮,相信不少人已经养成了这样的习惯.当你进入一个网站,总会忍不住要打开控制台看下它是如何布局的,动画是如何实现的等.这也是前端开发者一个不错的的学习途径. ...

  8. EntityFrame Work 5 性能注意事项(转自MSDN)

    1.简介 对象关系映射框架是一种在面向对象的应用程序中提供数据访问抽象的便捷方式.对于 .NET 应用程序,Microsoft 推荐的 O/RM 是实体框架.但任何抽象都要考虑性能. 本白皮书旨在介绍 ...

  9. 设置启动MyEclipse8.5的时候选择工作区间

    以前我的MyEclipse启动的时候默认都会进入到指定工作区间,比如:D:\MyEclipse,最近不知道怎么回事,每次启动的时候都是空的,必须要重新Switch Workspace选择一次 网上查找 ...

  10. Linux操作系统学习_操作系统是如何工作的

    实验五:Linux操作系统是如何工作的? 学号:SA1****369 操作系统工作的基础:存储程序计算机.堆栈(函数调用堆栈)机制和中断机制 首先要整明白的一个问题是什么是存储程序计算机?其实存储程序 ...