2010-09-21 72 views
1

我禁止使用按键事件在文本框中键入数字。但是,当使用Ctrl + V或通过鼠标粘贴内容时,数字将被输入到文本框中。如何防止这一点?除数字外,我必须允许粘贴/键入所有文本。防止将数字粘贴到.net窗体中的文本框中

+2

粘贴''one 2 three''到文本框中的预期结果是什么? – 2010-09-21 06:54:25

+0

在这种情况下,系统应该显示“输入的文本无效”提示消息。 – banupriya 2010-09-21 07:02:48

回答

3

一个非常简单的方法是使用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+"); 
} 

这将数字处理出现的任何文本,无论他们可能会出现在哪里,多少倍。

+0

非常感谢你解决了! – banupriya 2010-09-21 07:18:50

+0

这不是一个理想的解决方案。因为'TextChanged'是异步的,所以你实际上并不是取消*粘贴文本,而只是快速恢复旧文本。在旧文本恢复之前,可能会出现闪烁的粘贴文本无效。 – Jez 2012-09-30 15:49:52

3

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

+0

我已经使用KeyEventArgs的关键事件和使用e.KeyCode,我阻止了数字!但是,在使用文本更改事件时,我无法获得密钥的密钥代码! – banupriya 2010-09-21 07:11:38

-1

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

+1

在winforms应用程序中使用Javascript事件*真的很难;) – 2010-09-21 07:00:12

+0

是的......这是Windows窗体! – banupriya 2010-09-21 07:03:57

+0

哎呀,我的不好:$ – KBoek 2010-09-21 07:07:33

相关问题