约束CEdit控件输入的字符

有时候我们需要约束CEdit编辑控件输入指定的字符。

例如约束输入的字符只能输入0~9和小数点,数量只能2位。
在编辑控件的change事件中,加上此函数即可。

void CDialogDlg::OnEnChangeEtXd()
{
	SetEditInput(IDC_ET_Xd, _T('0'), _T('9'), true,2);
}
// Summary:   约束输入的字符
// Time:	  2020年4月21日 peihaodong
// Explain:	  nEdit-控件id start-起始字符 end-终止字符 bDot-是否约束小数点
// nStrNum-可以输入的字符数量,默认0是不限制字符的数量
void SetEditInput(int nEditId,TCHAR start,TCHAR end,
		bool bDot = true,int nStrNum = 0);

void CDialogDlg::SetEditInput(int nEditId, TCHAR start, 
	TCHAR end, bool bDot /*= true*/,int nStrNum /*= 0*/)
{
	int nStart, nEnd;
	CString szText;
	GetDlgItemText(nEditId, szText);
	CEdit* pEdit = (CEdit*)GetDlgItem(nEditId);
	pEdit->GetSel(nStart, nEnd);
	int i = szText.GetLength();
	BOOL bFlag = FALSE;//文字清理过的标志
	while (i--)
	{
		TCHAR c = szText[i];

		if (nStrNum > 0 && i >= nStrNum)
		{
			szText.Delete(i);
			bFlag = TRUE;
			continue;
		}
		
		if (bDot)
		{
			if (c == _T('.') || (c >= start && c <= end))//只允许输入数字和点
				continue;
		}
		else
		{
			if (c >= start && c <= end)//只允许输入数字
				continue;
		}

		szText.Delete(i);
		bFlag = TRUE;
	}
	if (bFlag)
	{
		SetDlgItemText(nEditId, szText);
		pEdit->SetSel(nStart, nEnd);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值