2010-12-18 27 views
1

我有字符的列表:如何基于字符列表阻止用户输入?

var l = new List<char>(); 
l.AddRange(Path.GetInvalidFileNameChars()); 
l.AddRange(Path.GetInvalidPathChars()); 

我想,当用户按下阻断人物之一,以检测和设置SupressKeyPresstrue

我有e.KeyCode,e.KeyDatae.KeyValue,但没有一个对应于例如?

我该如何验证它?

+1

你在处理'Control.KeyPress'事件吗?不用说你正在处理什么事件,或者'e'的数据类型是什么,恐怕没有人能够帮助你。 – 2010-12-18 22:34:58

+0

'KeyDown'实际上。但我可以使用任何按键事件。 – BrunoLM 2010-12-18 22:37:06

+0

什么是SupressKeyPress?它似乎不是任何.NET Framework类的属性... – 2010-12-18 22:49:48

回答

3

您可以通过Handled值设置为true,抑制KeyPress

var l = new List<char>(); 
l.AddRange(Path.GetInvalidFileNameChars()); 
l.AddRange(Path.GetInvalidPathChars()); 

this.KeyPress += (s, e) => 
{ 
    e.Handled = l.Any(x => x == e.KeyChar); 
}; 
+2

+1,但我倾向于使用.Contains而不是where子句... – 2010-12-18 22:49:21

+0

我明白了,我不能使用'KeyDown'。我没有注意到事件发生如此不同。 – BrunoLM 2010-12-18 23:08:26

+0

另外,从技术上讲,它可能应该是(sender,eventargs),因为这是传递给委托的内容。 – 2010-12-19 01:24:10

0
e.Handled = true; 

似乎并没有工作,至少不适合我。

是做了keydown事件工作与物业:

e.SupressKeyPress; 

由于之前按键或KEYUP活动,我“过滤”键,我想在一个额外的KeyDown事件处理的KeyDown发生。

SupressKeyPress Property MSDN

相关问题