问题描述
我正在尝试从文本框中获取用户输入的电话号码(我正在使用Business Skin Forms TbsSkinEdit
)。文本框应仅允许数字,空格,破折号和圆括号。是否有任何可以解决此问题的业务外观表单控件?还是有其他方法可以实现这一目标?
数字可以采用以下格式,不需要格式验证,仅允许输入指定字符-
(223)2312-1323
23324-3423-2342
23123123
2234 2343
我尝试通过重写KeyPress事件来实现,但是我只能在文本框中允许数字字符,但是其他操作(如Paste和Ctrl + V)需要额外的处理。因此,请检查是否有任何可用的控件。
解决方法
您可能可以使用TbsSkinMaskEdit
组件并设置其EditMask
属性。它有一些示例掩码可供选择,示例掩码之一用于电话号码:
!\(999\)000-0000;1;_
...但是您可以自己编辑遮罩并将其设置为此,例如:
!\(999\)0000-0000;1;_
如果这样不能解决问题,则可以创建一个OnChange
事件处理程序:
void __fastcall TForm1::bsSkinEdit1Change(TObject *Sender)
{
TbsSkinEdit& se = *static_cast<TbsSkinEdit*>(Sender);
decltype(se.Text) result;
bool update = false;
auto old_pos = se.SelStart - 1;
for(auto ch : se.Text) {
// numbers,spaces,dash and round brackets
if((ch >= '0' && ch <= '9') || ch == ' ' || ch == '-' || ch == '(' || ch == ')') {
result += ch;
} else {
update = true;
}
}
if(update) {
se.Text = result;
se.SelStart = old_pos;
}
}