有时候我们需要约束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);
}
}