【问题标题】:c# How to validate when pasting into textboxc#粘贴到文本框时如何验证
【发布时间】:2014-06-09 05:15:33
【问题描述】:

我写了一个小程序。它几乎可以按我的意愿工作,我只有一个问题。我正在尝试复制我在其他程序中找到的所有功能。

我有一个TextBox,当用户可以写一个电话号码。首先,他只能使用数字和“+”和“-”,所以我使用:

    private void textBoxPhoneNumber_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((char.IsDigit(e.KeyChar) == false) && (e.KeyChar != '+') && (e.KeyChar != '-') && (e.KeyChar != '\b')) e.Handled = true;
        }

然后我希望电话号码采用某种格式(+12-34-1234567),所以我使用:

    private bool IsPhoneNumberCorrect(string name)
        {
            return Regex.IsMatch(name, @"^+\+[0-9]{2}-[0-9]{2}-[0-9]{7}$", RegexOptions.None);
        }

最后是这个(使用 TextChange):

    private void phoneNumberValidity(object sender, EventArgs e)
    {
        counter4 = Convert.ToInt32(IsPhoneNumberCorrect(textBoxPhoneNumber.Text));
        pictureBoxPhoneNumber.Image = imageList1.Images[counter4];
        checkIfOk();
        textBoxPhoneNumber.Focus();
    }

我使用counter4 作为启用按钮的方法 (checkIfOk) 的一部分。当数字以正确的格式给出时,还有一个“X”图标会变为“勾号”。

它非常适合我(就像在我正在复制的程序中一样) - 当用户在 TextBox 中写入内容时,他只能使用数字和“+”和“-”,当格式正常时,图标会更改当其他文本框也正常时,确定按钮启用。

现在,问题终于来了:
我可以从剪贴板粘贴一些东西。在原始程序中,当我粘贴带有字母、数字和其他符号的内容时,只剩下数字和“+”和“-”。我的程序在这种情况下接受一切。

我一直在寻找可能有用的东西,但我发现的一切都非常复杂。有办法吗?


我试图做这样的事情。这导致仅粘贴数字时,“+”和“-”保持原样,但用户不能写任何东西。
我还是个初学者。也许我犯了一个简单的错误?

    private void phoneNumberValidity(object sender, EventArgs e)
    {
        Regex regex = new Regex("[^0-9-+]");
        if (regex.IsMatch(Clipboard.GetText()))
        {
            counter4 = Convert.ToInt32(IsPhoneNumberCorrect(textBoxPhoneNumber.Text));                
            pictureBoxPhoneNumber.Image = imageList1.Images[counter4];
            string output = regex.Replace(Clipboard.GetText(), "");
            textBoxPhoneNumber.Text = output;
            checkIfOk();
            textBoxPhoneNumber.Focus();
        }
    }

我正在尝试做这样的事情:

    private void phoneNumberValidity(object sender, EventArgs e)
    {
        counter4 = Convert.ToInt32(IsPhoneNumberCorrect(textBoxPhoneNumber.Text));
        pictureBoxPhoneNumber.Image = imageList1.Images[counter4];
        checkIfOk();
        textBoxPhoneNumber.Focus();

        Regex regex = new Regex("[^0-9-+]");
        if (textBoxPhoneNumber.Text.Contains("a"))
        {
            if (regex.IsMatch(Clipboard.GetText()))
            {
                string output = regex.Replace(Clipboard.GetText(), "");
                textBoxPhoneNumber.Text = output;
            }
        }
    }

我知道这不是我想要的,但也许有人可以提供一些线索...... 通常我想,我想检查 tb 中的文本是否包含一些不需要的元素,但我不知道如何检查它。如您所见,它只检查一个不需要的元素。

【问题讨论】:

  • 这看起来像你要找的东西stackoverflow.com/questions/5113722/…
  • 尝试查看文本框上可用的其他事件,例如 OnChange 事件可能适合您的需求
  • @Prix 我没有看到任何适合我的东西。
  • @Hanno 我已经在使用 TextChanged 事件,我无法使用任何其他可能有帮助的事件。所以我不能在一个事件中做两件事(检查用户正在写的内容和粘贴 [with RMB click])?

标签: c# validation paste


【解决方案1】:

首先,请对 Convert.ToInt32 使用 TRY-Catch !

第二种:使用TextChanged事件,用TextBox的实际内容验证输入

要验证,你可以做类似的事情:

string output = ""
string clipboardText = GetClipboardText()
for each chara in clipboardText's characters
    if chara.isNumeric or chara=='+' or chara == '-'
         output += chara
end foreach

当然它只是一个简单的灵魂,但你可以根据需要配置它。 或者,如果您想要更复杂的方式,您可以使用正则表达式...以数字或 + 开头 - 但不包含字母字符。根据您的要求。

【讨论】:

  • 谢谢。我正在使用 TextChanged 事件。我正在尝试验证您所写的内容(请参阅我帖子的底部),但这仍然是错误的。我找不到其他方法。
  • 你可以试试上面这个简单的东西:)
【解决方案2】:

这是我做的,它有效 :) 我只会按照 Krekkon 的建议添加 try-catch 块。

    private void phoneNumberValidity(object sender, EventArgs e)
    {
        counter4 = Convert.ToInt32(IsPhoneNumberCorrect(textBoxPhoneNumber.Text));
        pictureBoxPhoneNumber.Image = imageList1.Images[counter4];
        if (Regex.IsMatch(textBoxPhoneNumber.Text, "[^0-9-+]"))
        {
            Regex regex = new Regex("[^0-9-+]");
            string output = regex.Replace(Clipboard.GetText(), "");
            textBoxPhoneNumber.Text = output;
        }
        checkIfOk();
        textBoxPhoneNumber.Focus();
        }

也许将来会对某人有所帮助。

【讨论】:

    【解决方案3】:

    也许你应该尝试这样:保留第一个版本的 phoneNumberValidity 方法,然后检查 tb Text 是否有一些不需要的元素,去掉它们。

    【讨论】:

      猜你喜欢
      • 2019-03-17
      • 2014-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 2013-08-02
      相关资源
      最近更新 更多