C# c粘贴到文本框时如何验证

C# c粘贴到文本框时如何验证,c#,validation,paste,C#,Validation,Paste,我写了一个小程序。它几乎像我想要的那样工作,我只有一个问题。我正在尝试复制在其他程序中找到的所有函数 我有一个文本框,当用户可以写一个电话号码。首先,他只允许使用数字和+和-,所以我使用: private void textBoxPhoneNumber_KeyPress(object sender, KeyPressEventArgs e) { if ((char.IsDigit(e.KeyChar) == false) && (e

我写了一个小程序。它几乎像我想要的那样工作,我只有一个问题。我正在尝试复制在其他程序中找到的所有函数

我有一个文本框,当用户可以写一个电话号码。首先,他只允许使用数字和+和-,所以我使用:

    private void textBoxPhoneNumber_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((char.IsDigit(e.KeyChar) == false) && (e.KeyChar != '+') && (e.KeyChar != '-') && (e.KeyChar != '\b')) e.Handled = true;
        }
    private bool IsPhoneNumberCorrect(string name)
        {
            return Regex.IsMatch(name, @"^+\+[0-9]{2}-[0-9]{2}-[0-9]{7}$", RegexOptions.None);
        }
然后我希望电话号码的格式为+12-34-1234567,因此我使用:

    private void textBoxPhoneNumber_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((char.IsDigit(e.KeyChar) == false) && (e.KeyChar != '+') && (e.KeyChar != '-') && (e.KeyChar != '\b')) e.Handled = true;
        }
    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();
    }
我使用计数器4作为启用按钮的方法checkIfOk的一部分。还有一个X图标,当数字以正确的格式给出时,它会变为勾号

它对我来说非常有效,就像我正在复制的程序一样-当用户在文本框中写入内容时,他只能使用数字和+和-当格式正常时,图标会更改,当其他文本框也正常时,ok buton会启用

最后,问题是: 我可以从剪贴板粘贴一些东西。在最初的程序中,当我粘贴带有字母、数字和其他符号的东西时,只剩下数字和+和-了。我的程序在这种情况下接受一切

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

我试着做这样的事。这会导致当只粘贴数字和+和-时,仍然保持其应有的状态,但用户无法写入任何内容。 我还是个初学者。也许我犯了一个简单的错误

    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中的文本是否包含一些不需要的元素,但我不知道如何检查。正如您所看到的,它只检查一个不需要的元素。

也许您应该这样尝试:保持phoneNumberValidity方法的第一个版本不变,然后检查tb文本是否有一些不需要的元素,将其清除。

首先,请使用try Catch进行Convert.ToInt32

第二:使用事件,并使用文本框的实际内容验证输入

要验证,可以执行类似的操作:

string output = ""
string clipboardText = GetClipboardText()
for each chara in clipboardText's characters
    if chara.isNumeric or chara=='+' or chara == '-'
         output += chara
end foreach
当然,这只是一个简单的解决方案,但你可以根据自己的需要进行配置。
或者如果你想要更复杂的方式,你可以玩正则表达式。。。以数字或+-开头,但不包含字母字符。根据您的请求。

这是我做的,它是有效的:我只会按照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();
        }

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

这看起来像是您正在寻找的,请尝试查看文本框中提供的其他事件,例如OnChange事件可能适合您的需要needs@Prix我在那里看不到任何适合我的东西。@Hanno我已经在使用TextChanged事件,我无法使用任何其他可能有帮助的事件。所以我不能在一次事件中检查用户正在写什么和粘贴什么?谢谢。我正在使用TextChanged事件。我试图验证你写的,请看,我的文章的底部,但它仍然是错误的。我找不到其他方法。你可以试试上面这个简单的方法: