2010-11-03 103 views

回答

4

在C#中,這將是:

// Note the escaped string here: \\ instead of \, and \" for the quote 
string alpha = "./;'[]<>?:\"{}\\|[email protected]#$%^&*()_+-=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "; 

if(alpha.Contains(e.KeyChar)) 
    e.Handled = true; 
+2

我認爲這個字符串是最適合使用逐字字符串爲代表的是由於雙重的雙引號。 – 2010-11-03 01:31:35

+1

@Jeff:加倍的雙引號是VB的轉義版 - 它只是字符串中的一個雙引號。儘管使用逐字字符串,你仍然需要逃避。我只是將它們轉換爲C#的風格,但是你可以做'@'./;'[] <> ?:「」{}'... – 2010-11-03 01:34:39

+0

這就是說,這裏真的沒有什麼區別 - 這是你的問題喜歡錶達它 - 使用@與「」或一個普通的字符串與\「和我知道\\ – 2010-11-03 01:41:31

-1
string alpha = "./;'[]<>?:\"{}\\|[email protected]#$%^&*()_+-=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "; 

if(alpha.Contains(e.KeyChar)) 
e.Handled = true; 

除此之外,有一個優秀的在線工具,C#轉換爲VB.NET,反之亦然 http://www.developerfusion.com/tools/convert/vb-to-csharp/

+0

這,順便說一句,假設參考Microsoft.VisualBasic.dll,它不會存在(默認情況下)在C#項目中。沒有這個,Strings.InStr將不存在。 (這就是順便說一句,自動轉換例程的一個問題......) – 2010-11-03 01:32:55

+0

'Strings.InStr(string,char)'?我認爲不懂語言的人應該避免使用該工具。 – 2010-11-03 01:34:23

+0

@negative:來自Microsoft.VisualBasic.dll程序集。它默認存在於VB.NET項目中,但不存在於C#項目中。 – 2010-11-03 01:35:10

0

注意在字符串的起始處使用&符號(@):

string alpha = @"./;'[]<>?:""{}\|[email protected]#$%^&*()_+-=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "; 
if (alpha.IndexOfAny(new[] { e.KeyChar }) > -1) 
    e.Handled = true; 

或更多一點時髦的,我們可以消除if聲明:

e.Handled = alpha.IndexOfAny(new[] { e.KeyChar }) > -1; 
+0

這將不會編譯 - 需要'alpha.IndexOfAny(new [] {e.KeyChar})',因爲IndexOfAny需要一個'char []' - 否則,您可以使用IndexOf – 2010-11-03 01:36:18

+0

@Reed - 是的,好點:)編輯回答。我目前打開了一個Silverlight項目,而關鍵的向上/向下事件處理程序不使用KeyChar,而且它沒有KeyPress事件處理程序,所以我不得不做出一個假設。 – slugster 2010-11-03 01:46:51