[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,'' ...
随机推荐
- Linux 系统命令总结
自己收集到的Linux系统命令大全! 1,查看apache2的连接状态: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S ...
- 2008技术内幕:T-SQL语言基础
2008技术内幕:T-SQL语言基础 单表查询摘记 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLF ...
- C#大牛应该知道的一些知识
任何一个使用.NET的人 描述线程与进程的区别? 什么是Windows服务,它的生命周期与标准的EXE程序有什么不同 Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗 ...
- C#有意思的算法题
年底了,特贡献一些C#有意思的算法题 2013年,即将要过去了.屌丝C#程序员们拿到了年终奖不?是不是又想蠢蠢欲动了?是不是想通过跳槽来为自己实现加薪的梦想?好吧,跳槽之前还是做点准备吧,准备好C ...
- 【转】Objective-C并发编程:API和挑战
并发指的是在同一时间运行多个任务.在单核CPU的情况下,它通过分时的方式实现,如果有多个CPU可用,则是真正意义上的多个任务“并行”执行了. OS X和iOS提供了多个API支持并发编程.每个API都 ...
- AngularJS的初始化
AngularJS的初始化 本文主要介绍AngularJS的自动初始化以及在必要的适合如何手动初始化. Angular <script> Tag 下面通过一小段代码来介绍推荐的自动初始化过 ...
- .NET4.5 Console.ReadKey()在多线程下的BUG
.NET 4.5 在多线程的控制台里,Console.ReadKey()可能会造成线程死锁.看代码: static void Main(string[] args) { System.Timers.T ...
- 关于AngularJS的分享
去年下半年在部门内部做的一个关于AngularJS的分享,放在这里,当作一个记录. 点击下载
- Makefile常用信息查询页
这是博主第一次尝试在博客中使用markdown来写博文,目前感觉还不错.大家也可以尝试尝试. 符号说明 符号 作用 换行符 @ 放在命令前面隐藏命令输出 - 放在命令前面忽略命令错误 : 以来规则 ...
- 简单实现android和wp聊天
使用Beetle.NetPackage简单实现android和wp聊天 Beetle.NetPackage是一个多台平开源Client TCP通讯组件,它针对不同平台提供统一的消息描述规则和使用规范可 ...