我写了一个小程序。它几乎按照我的意愿工作,我只有一个问题。我正在尝试复制我在其他程序中找到的所有功能。
我有一个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中写入内容时,他只能使用数字和“+”和“ - ”,当格式正常时,图标会发生变化当其他文本框也正常时,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中的文本是否包含一些不需要的元素,但我不知道如何检查它。如您所见,它只检查一个不需要的元素。
答案 0 :(得分:1)
首先,请使用TRY-Catch for Convert.ToInt32!
第二:使用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
当然它只是一个简单的灵魂,但你可以随心所欲地设置它。 或者如果你想要更复杂的方式,你可以使用正则表达式...从数字开始或+ - 但不包含字母字符。根据您的要求。
答案 1 :(得分:0)
这就是我所做的,它的工作原理:)我只会像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();
}
将来可能会有所帮助。
答案 2 :(得分:-1)
也许您应该尝试这样:保留第一个版本的phoneNumberValidity方法,然后检查tb Text是否有一些不需要的元素,摆脱它们。