允许用户只输入文本?

问题描述:

如何使布尔语句只允许文本?我有这个代码只允许用户输入数字,但可以找出如何做文本。允许用户只输入文本?

bool Dest = double.TryParse(this.xTripDestinationTextBox.Text, out Miles); 
bool MilesGal = double.TryParse(this.xTripMpgTextBox.Text, out Mpg); 
bool PriceGal = double.TryParse(this.xTripPricepgTextBox.Text, out Price); 
+0

你是什么意思的“文本”?只有字母表的字母? – Arkku 2010-05-16 15:56:52

+0

是的,它强制用户只能输入他的名字和姓氏 – 2010-05-16 15:59:06

+1

如果名称包含空格,连字符或其他特殊字符,该怎么办?也许有些人在他们的名字中有数字,谁知道... – 2010-05-16 16:04:05

您可以在KeyPress事件中使用下面的代码:

if (!char.IsLetter(e.KeyChar)) { 
e.Handled = true; 
} 
+0

这一个对我的解决方案的工作最好,但感谢所有的答案,我很欣赏它的人。 – 2010-05-16 16:21:26

+0

我怎么能让用户退格等.. – 2010-05-16 16:27:11

+0

@迈克尔,你看了MaskedTextBox? – 2010-05-16 18:45:11

您可以使用正则表达式,浏览这里:http://regexlib.com/

更新:在看您的意见我会建议你阅读这篇文章:

User Input Validation in Windows Forms


原来的答复:最简单的方法,至少如果您使用的是.NET 3.5,则使用LINQ:

bool isAllLetters = s.All(c => char.IsLetter(c)); 

在旧版本的.NET你可以创建一个方法来为你做这个:

bool isAllLetters(string s) 
{ 
    foreach (char c in s) 
    { 
     if (!char.IsLetter(c)) 
     { 
      return false; 
     } 
    } 
    return true; 
} 

您还可以使用正则表达式。如果你想限制AZ那么你可以使用这个

bool isOnlyLetters = Regex.IsMatch(s, @"^\p{L}+$"); 

bool isOnlyLetters = Regex.IsMatch(s, @"^[a-zA-Z]+$"); 

你可以做一个,如果你想允许任何字母为Unicode中定义的,那么你可以使用这个正则表达式几件事。

  1. 用户正则表达式来检查你的字符串“文本”的概念,只匹配
  2. 编写一些代码,核对的有效字符列表每个字符。甚至使用char.IsLetter()
  3. 使用MaskedTextBox中并设置自定义屏蔽,以限制输入到文本中的字符

我发现挂钩进入文本框的文本更改事件,并接受/拒绝更改为可接受的解决方案。 “只允许文本”是一个相当含糊的定义,但是你也可以检查你新添加的文本(下一个字符)是否是数字,并简单地拒绝所有数字/不允许的字符。这会让用户觉得他们只能输入字符和特殊字符(如点,问号等)。

private void UTextBox_TextChanged(object sender, EventArgs e) 
{ 
    string lastCharacter = this.Text[this.Text.Length-1].ToString(); 
    MatchCollection matches = Regex.Matches(lastCharacter, "[0-9]", RegexOptions.None); 
    if (matches.Count > 0) //character is a number, reject it. 
    { 
     this.Text = Text.Substring(0, Text.Length-1); 
    } 
} 
+0

如果在字符串的中间插入不符合的字符,只检查最后一个字符不起作用。验证每个TextChanged事件上的整个字符串可能会更好。 – 2010-05-16 16:09:10

+0

没错,最好是无论如何处理按键。 – 2010-05-16 16:11:29