我有一个 MaskedTextBox 控件,在我们的例子中,它正在收集社会保险(税)号码(虽然没有 ValidatingType,因为字符串表示包括掩码文字)。社会保险号是由破折号分隔的 3 组 3 位数字。有时可以键入或输入空格而不是破折号。
文本框的配置是:
- 面罩:999-999-999
- 验证类型:空/不需要
- 跳过文字:真
- CutCopyMaskFormat:IncludeLiterals(仅在从文本框剪切/复制时相关)
- TextMaskFormat:IncludeLiterals
-- 如果您认为还有其他重要的属性,请告诉我!
问题
粘贴以下税号“450 622 097”时,由于空格与掩码不匹配。所以我最终在文本框中输入“450- 62-2 9”。粘贴“450-622-097”将成功粘贴到框中。
我希望能够拦截粘贴事件,以便可能修复它以用破折号替换空格。
或者,我们可以让掩码接受破折号或空格(但总是输出破折号)?
非解决方案
MaskInputRejected 事件 - 我似乎无法处理最初输入的内容(即被拒绝的内容),以便将其与剪贴板顶部的内容进行比较。它只是返回它是如何被拒绝的
验证事件 - 在应用掩码后已经发生。即“450- 62-2 9”的值现在在文本框中。
使用带有静态 Parse 函数的自定义 ValidatingType - 同样,在应用掩码后发生。
检测 Key-Down 事件 - 然后,如果键系列是 Ctrl-V,则手动处理并传入剪贴板文本的清理版本。可以工作,但是通过右键单击上下文菜单粘贴呢?
还有其他想法吗?