我正在开发基于Windows窗体的应用程序。
我想验证文本框值。用户仅在文本框中输入数字值, 现在我能够验证keypressevent,但我想验证复制值应该是数字然后只粘贴(鼠标右键单击粘贴或Ctrl + v)文本框。
答案 0 :(得分:1)
答案取决于您想要的反馈水平。如果您想提供用户反馈,我建议您使用Validating事件和ErrorProvider。
以下是一个示例:http://www.java2s.com/Tutorial/CSharp/0460__GUI-Windows-Forms/ErrorProvidernumbermustbeinarange.htm
否则,只需绑定到KeyDown或TextChanged事件,并删除您不想在那里的任何输入。根据您的确切验证要求,您可能还会发现有用的MaskedTextBox:http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.aspx
答案 1 :(得分:0)
当用户将焦点放在文本框上时(假设某个值已从某处复制),您可以检查复制到剪贴板的最后一个值,并根据验证标准禁用/删除控件中的焦点。
在C#中使用剪贴板的示例:http://www.codeproject.com/KB/shell/clipboard01.aspx
答案 2 :(得分:0)
你可以使用这样的东西。
private void txtOrgao_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
{
//Valida copy and paste com caracteres especiais
e.SuppressKeyPress = !Util.validaCaracteresEspeciaisClipBoard(txtOrgao);
}
}
private void txtOrgao_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsLetterOrDigit(Convert.ToChar(e.KeyChar)) &&
!Char.IsControl(Convert.ToChar(e.KeyChar)) &&
!Char.IsWhiteSpace(Convert.ToChar(e.KeyChar)))
{
e.Handled = true;
}
}
Helper类util:
public class Util
{
/// <summary>
/// Valida caracteres especiais em textBox para suprimir o evento KeyPress
/// Caracteres Inválidos: Simbolos
/// </summary>
/// <param name="caixaTexto">objeto TextBox</param>
/// <returns></returns>
static public Boolean validaCaracteresEspeciaisClipBoard(TextBox caixaTexto)
{
//Valida copy and paste com caracteres especiais
String clip = String.Empty;
if (Clipboard.ContainsText())
{
clip = Clipboard.GetText().Substring(0, caixaTexto.MaxLength);
for (int tam = 0; tam < caixaTexto.MaxLength; tam++)
{
if (!Char.IsLetterOrDigit(clip[tam]) &&
!Char.IsControl(clip[tam]) &&
!Char.IsWhiteSpace(clip[tam]))
{
return false;
}
}
}
return true;
}
}