MFC笔记一:MFC EditControl实现输入过滤

本文介绍如何为MFC中的EditControl控件添加字符过滤功能,包括过滤Windows非法文件名字符、仅允许数字输入及自定义过滤规则。通过添加EN_CHANGE消息并重载处理函数来实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       MFC在使用EditControl控件作为字符输入时,如输入windows文件名等情况,为EditControl控件添加相应的过滤规则以应对不同的使用场景。

常见情况:1、Windows非法字符过滤;

                    2、仅输入数字(正数、正负数)等情况;

                    3、自定义过滤字符或字符串。


解决思路:

                 1、为EditControl控件添加变量CString型或Control型均可,EditControl实现过滤本质为对输入字符串的判断,当包含非法字符时自动删除非法字符;

                 2、为EditControl控件添加EN_CHANGE消息,当EditControl输入字符发生变化时即触发该消息。

                 3、重载该消息,添加过滤规则。


示例:

            1、为控件添加Value--CString型变量m_editInfo;




             2、为EditControl天剑EN_CHANGE消息


            3、添加过滤规则,以windows文件名非法字符过滤为例

UpdateData(TRUE);
if (m_editInfo.Find('/')>=0 || m_editInfo.Find('\\')>=0 || m_editInfo.Find('|')>=0 ||
    m_editInfo.Find(':')>=0 || m_editInfo.Find('\?')>=0 || m_editInfo.Find('\"')>=0 ||
    m_editInfo.Find('*')>=0 || m_editInfo.Find('<')>=0 || m_editInfo.Find('<')>=0)
		{
			int  tem_nEditSize = m_editInfo.GetLength();
			m_editInfo = m_editInfo.Left(tem_nEditSize-1);

			UpdateData(FALSE);
 			if (m_editInfo.GetLength()>0)
 			{
 				//设置Edit光标至末尾,否则光标会跳至段首
 				((CEdit*)GetDlgItem(IDC_EDIT_INPUT))->SetSel(m_editInfo.GetLength(), m_editInfo.GetLength());
 			}
		}



备注:1、实现数字输入时可通过CString->int/float等进行转换;

             2、简单的数字范围滤除可添加Edit——Value——int型变量,设置输入范围;

             3、更多过滤示例,解决思路可参考Demo

http://download.youkuaiyun.com/download/kui1989tkol/10198214






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值