mfc 固定编辑框输入上限和下限_[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))

{

MessageBoxA(_T("数值超过范围!"), _T("错误"), MB_OK);

}

}

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

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

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

void CParaConfigDlg::OnEnKillfocusReceivergain()

{

UpdateData(true);

if ((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))

{

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编辑框换行实现

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

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

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

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

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

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

JS判断只能是数字和小数点1.文本框只能输入数字代码(小数点也不能输入)

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

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

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

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

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

JS判断只能是数字和小数点 1.文本框只能输入数字代码(小数点也不能输入)

Vue中父子组件通讯——组件todolist

一.todolist功能开发

pandas数据结构之DataFrame操作

这一次我的学习笔记就不直接用官方文档的形式来写了了,而是写成类似于“知识图谱”的形式,以供日后参考. 下面是所谓“知识图谱”,有什么用呢? 1.知道有什么操作(英文可以不看) 2.展示本篇笔记的结构 ...

jquery元素插入、删除、清空、找父子级元素

1)jquery元素插入

测试

61 origin授控于MATLAB

官方教程:http://www.originlab.com/forum/topic.asp?TOPIC_ID=22339 学习自白东升老师originPRO8.0教程. 我用的是origin pro2 ...

Linux下onvif客户端关于ipc摄像头的搜索

设备搜索:要访问一个IPC摄像头,或者说要调用IPC摄像头提供的WEB服务接口,就要先知道其IP地址,这就是设备发现的过程,或者叫设备搜索的过程.IPC摄像头用的是239.255.255.250(端口 ...

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值