验证 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;
    }
}