验证 BusinessSkinForms 控件中 phone 数字字符串的输入
Validating input for phone number string in BusinessSkinForms controls
我正在尝试获取 phone 数字作为用户在文本框中的输入(我正在使用 Business Skin Forms TbsSkinEdit
)。文本框应该只允许数字、空格、破折号和圆括号。有没有什么业务皮肤控件可以解决这个问题?或者还有其他方法可以实现这一目标吗?
数字可以是以下格式,不要求格式验证,只允许输入指定字符 -
(223)2312-1323
23324-3423-2342
23123123
2234 2343
我尝试通过覆盖 KeyPress 事件,但这样我只能在文本框中允许使用数字字符,但粘贴和 Ctrl+V 等其他操作需要额外处理。所以检查是否有可用的现成控件。
您或许可以使用 TbsSkinMaskEdit
组件并设置其 EditMask
属性。它有一些示例掩码可供选择,其中一个示例掩码用于 phone 个数字:
!\(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;
}
}
我正在尝试获取 phone 数字作为用户在文本框中的输入(我正在使用 Business Skin Forms TbsSkinEdit
)。文本框应该只允许数字、空格、破折号和圆括号。有没有什么业务皮肤控件可以解决这个问题?或者还有其他方法可以实现这一目标吗?
数字可以是以下格式,不要求格式验证,只允许输入指定字符 -
(223)2312-1323
23324-3423-2342
23123123
2234 2343
我尝试通过覆盖 KeyPress 事件,但这样我只能在文本框中允许使用数字字符,但粘贴和 Ctrl+V 等其他操作需要额外处理。所以检查是否有可用的现成控件。
您或许可以使用 TbsSkinMaskEdit
组件并设置其 EditMask
属性。它有一些示例掩码可供选择,其中一个示例掩码用于 phone 个数字:
!\(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;
}
}