gpt4 book ai didi

c# - Winforms MaskedTextBox - 重新格式化粘贴的文本以匹配掩码

转载 作者:太空狗 更新时间:2023-10-30 01:27:23 26 4
gpt4 key购买 nike

我有一个 MaskedTextBox 控件,在我们的例子中,它正在收集社会保险(税)号(没有 ValidatingType,因为字符串表示形式包括掩码文字)。社会保险号码由 3 组 3 位数字组成,每组 3 位数字由破折号分隔。有时可能会键入或输入空格而不是破折号。

文本框的配置是:

  • 掩码:999-999-999
  • 验证类型:空/不需要
  • 跳过文字:正确
  • CutCopyMaskFormat:IncludeLiterals(仅在从文本框剪切/复制时相关)
  • TextMaskFormat: IncludeLiterals

-- 让我知道是否还有您认为重要的其他属性!

问题

粘贴以下税号“450 622 097”时,由于空格与掩码不匹配。所以我最终在文本框中输入了“450-62-2 9”。粘贴“450-622-097”将成功粘贴到框中。

我希望能够拦截粘贴事件,以便可能修复它以用破折号替换空格。

或者,我们能否让掩码接受破折号或空格(但始终输出破折号)?

非解决方案

MaskInputRejected 事件 - 我似乎无法处理最初输入的内容(即被拒绝的内容),以便将其与剪贴板顶部的内容进行比较。它只是返回它是如何被拒绝的

验证事件 - 已在应用掩码后发生。 IE。 “450-62-2 9”的值现在在文本框中。

将自定义 ValidatingType 与静态解析函数一起使用 - 同样,在应用掩码之后发生。

检测 Key-Down 事件 - 如果按键系列是 Ctrl-V,则手动处理并传入剪贴板文本的清理版本。可以工作,但是通过右键单击上下文菜单粘贴呢?

还有其他想法吗?

最佳答案

虽然这是一个锤子解决方案,但掩码字符串存在局限性,我看不到其他解决方法。您需要的是捕获粘贴事件并在文本进入文本框之前对其进行处理。看下面一个简单的例子

   class MyMaskedTextbox : MaskedTextBox
{
const int WM_PASTE = 0x0302;

protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case WM_PASTE:
if (Clipboard.ContainsText())
{
string text = Clipboard.GetText();
text = text.Replace(' ', '-');
//put your processing here
Clipboard.SetText(text);
}
break;
}
base.WndProc(ref m);
}
}

关于c# - Winforms MaskedTextBox - 重新格式化粘贴的文本以匹配掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2876971/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com