[MFC] 编辑框 EditControl 输入数字范围限制
在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 输入数字范围限制的更多相关文章
- MFC编辑框换行实现
MFC中换行实现 在mfc中编辑框允许输入多行时,换行符被表示为<归位><换行>即“\r\n”,用ascii码表示为13 10 如果为编辑框中想要输入换行,就请将编辑框的属性: ...
- js限制文本框只能输入数字方法小结
有时需要限制文本框输入内容的类型,本节分享下正则表达式限制文本框只能输入数字.小数点.英文字母.汉字等代码. 例如,输入大于0的正整数 代码如下: <input onkeyup="i ...
- js限制文本框只能输入数字方法小结(转)
这篇文章主要分享下js代码限制文本框中只能输入数字的多个实例,学习下js控制文本框中输入数字的方法,需要的朋友可以参考下 有时需要限制文本框输入内容的类型,本节分享下正则表达式限制文本框只能输入数 ...
- C# 使用js正则表达式,让文本框只能输入数字和字母,最大长度5位
使用js正则表达式,让文本框只能输入数字和字母,最大长度5位,只需要加个onkeyup事件,即可简单实现 <asp:TextBox ID="txtBegin" runat=& ...
- 用Jquery控制文本框只能输入数字和字母
用Jquery控制文本框只能输入数字和字母 $.fn.onlyNum = function () { $(this).keypress(function (event) { var eventObj ...
- js限制文本框只能输入数字
JS判断只能是数字和小数点1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'') ...
- 监听SWT文本框只能输入数字
在SWT开发中,很多时候需要文本框只能输入数字(当输入字母或者其他字符时为无效),这个时候需要给文本框设置监听VerifyListener, code 如下: text.addVerifyListen ...
- JQuery 限制文本框只能输入数字和小数点
$(function(){ /*JQuery 限制文本框只能输入数字*/ $(".NumText").keyup(function(){ $(this).val($(this).v ...
- js设置文本框只能输入数字
JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入) <input onkeyup="this.value=this.value.replace(/\D/g,'' ...
随机推荐
- js 将long日期格式 转换为标准日期格式方法
我们经常在操作的时候会发现从后台传递到view层的json中datetime类型变成了long型,当然你也可以从后台先转为string类型,但是如果是从和数据库对应的object中封装的话,就不能再去 ...
- VS2010生成安装包制作步骤
VS2010生成安装包制作步骤 在VS2010中文旗舰版本中生成winForm安装包,可以复制你电脑中的开发环境,避免你忘记了一下配置然后在别的机器上运行不起来.也省去了Framwork的安装. ...
- 玩转python之测试一个对象是否是类字符串
提到类型测试,我首先想到python中“鸭子类型”的特点,所谓鸭子类型,即如果它走路像鸭子,叫声也像鸭子, 那么对于我们的应用而言,就可以认为它是鸭子了!这一切都是为了功能复用. 我们总是需要测试一个 ...
- 于快速创建 IEqualityComparer<T> 实例的类 Equality<T>
于快速创建 IEqualityComparer<T> 实例的类 Equality<T> 原文中的 Equality<T> 实现如下: 1 2 3 4 5 6 7 8 ...
- [Usaco2007 Jan]Running贝茜的晨练计划[一般DP]
Description 奶牛们打算通过锻炼来培养自己的运动细胞,作为其中的一员,贝茜选择的运动方式是每天进行N(1 <= N <= 10,000)分钟的晨跑.在每分钟的开始,贝茜会选择下一 ...
- ASP.NET MVC实现剪切板功能
前言 关于复制粘贴的功能,好像不用劳师动众的写后端代码,JS就可以,但正如大家所知道的,兼容性问题,当然这么通用的功能怎么可能没有一个通用的方案呢,于是便找到了一款jquery插件 jquery.cl ...
- (转)poj1182食物链
这题主要是看了http://blog.csdn.net/c0de4fun/article/details/7318642这篇解题报告,所以内容基本是转的!感谢大牛这么详细的把过程写的很清楚! 这道题目 ...
- 在Netbeans上配置Android开发环境
在NetBeans下开发Android的所需要的基本条件:NetBeans(包含JDK)+Android SDK+NBAndroid(为Netbeans设计的Android 开发插件) 详情:http ...
- 配置restful webservice 框架restkit
(配置restful webservice 框架restkit) RestKit 是一个开源的 objective-c 框架,容许在 iOS 和 Mac OS X 的 Objective-C 中与 R ...
- HDU 2040 亲和数
Problem Description 古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为: 1+2+4+5+10+11+20+22+44+55+110=284. ...