mfc 固定编辑框输入上限和下限_MFC中编辑框数字限制范围

本文主要讨论了在编程中遇到的编辑框输入值验证的问题,特别是设置最大值和最小值限制。通过两种方法解决焦点丢失时同步窗体变量与输入值不一致的情况,以及输入值超出范围时的提示问题。最后提到了EN_CHANGE消息在用户未失去焦点前按回车键可能引发的问题,并给出了相应的解决建议。
摘要由CSDN通过智能技术生成

为编辑框添加 int变量的时候下面有2空可以填写最大值与最小值;

或者自己添加代码DDV_MinMaxInt(pDX, m_nPort, 1, 65535);

但是这个不一定要工作。

解决方法:给编辑框添加一个失去焦点(killfocus)的消息,在里面UpdateData(TRUE)一下就搞定。

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

不过又出现另一个原因,只要你输入的值不在 设定范围里,那么你的焦点就不能离开控件,因为会一直弹窗提示的。

解决方法:去掉DDV_MinMaxInt(pDX, m_nPort, 1, 65535),在killfocus函数里自己写代码判断。

{

UpdateData(TRUE);

if ((m<0) || (m>65535))

{

MessageBoxW(NULL, L"数值超过范围!", L"错误", MB_OK);

m = 0;

UpdateData(FALSE);

}

}

注:其实这样做和第一种没什么区别,只是更灵活一些。CString类型变量可以设定字串长度。

补充:经过TechWalker提醒,程序用户可能在输入之后没有让编辑框失去焦点,而是直接按回车键进入下一步操作,那么本文上面所说的则会有问题。于是我搜索了一下,应该用EN_CHANGE消息,而不是KillFocus消息。

{

//TODO: If this is a RICHEDIT control, the control will not//send this notification unless you override the CDialog::OnInitDialog()//function and call CRichEditCtrl().SetEventMask()//with the ENM_CHANGE flag ORed into the mask.//TODO: Add your control notification handler code here UpdateData(TRUE);

if ((m_nEditNum>100) || (m_nEditNum<1))

{

m_nEditNum = 1;

UpdateData(FALSE);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值