【问题标题】:Prevent numbers from being pasted in textbox in .net windows forms防止数字被粘贴到 .net windows 窗体的文本框中
【发布时间】:2010-09-21 06:51:11
【问题描述】:

我已阻止使用按键事件在文本框中输入数字。但是当使用 Ctrl+V 或通过鼠标粘贴内容时,数字正在输入到文本框中。如何防止这种情况?我必须允许粘贴/键入除数字以外的所有文本。

【问题讨论】:

  • "one 2 three" 粘贴到文本框中的预期结果是什么?
  • 在这种情况下,系统应该显示警告消息'输入的文本无效'。

标签: c# .net windows winforms


【解决方案1】:

相当简单的方法是使用TextChanged 事件检查文本。如果文本有效,则将其副本存储在字符串变量中。如果无效,则显示一条消息,然后从变量中恢复文本:

string _latestValidText = string.Empty;
private void TextBox_TextChanged(object sender, EventArgs e)
{
    TextBox target = sender as TextBox;
    if (ContainsNumber(target.Text))
    {
        // display alert and reset text
        MessageBox.Show("The text may not contain any numbers.");
        target.Text = _latestValidText;
    }
    else
    {
        _latestValidText = target.Text;
    }
}
private static bool ContainsNumber(string input)
{
    return Regex.IsMatch(input, @"\d+");
}

这将处理文本中出现的任何数字,无论它们出现在何处或出现多少次。

【讨论】:

  • 这不是一个理想的解决方案。因为TextChanged 是异步的,您实际上并没有取消文本的粘贴,只是快速恢复旧文本。粘贴的文本可能在旧文本恢复之前无效。
【解决方案2】:

使用 TextBox.TextChanged 事件。然后使用与 KeyDown 事件中相同的代码。其实你不再需要keydown事件

【讨论】:

  • 我已经使用了按键事件的 KeyEventArgs 并使用了 e.KeyCode,我已经阻止了数字!但是在使用文本更改事件时,我无法获取密钥的密钥代码!
【解决方案3】:

您可以使用 JavaScript 更改事件 (onchange) 代替 keydown 事件。它只会在用户离开文本框时检查。

【讨论】:

  • 在 winforms 应用程序中使用 Javascript 事件真的很难 ;)
  • 是的...这是 Windows 窗体!
猜你喜欢
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多