Что такое C # эквивалент ChrW (e.KeyCode)? - PullRequest
14 голосов
/ 19 мая 2011

В VB.NET 2008 я использовал следующее утверждение:

MyKeyChr = ChrW(e.KeyCode)

Теперь я хочу преобразовать приведенное выше утверждение в C #.

Любые идеи?

Ответы [ 3 ]

20 голосов
/ 19 мая 2011

Быстрый и грязный эквивалент ChrW в C # просто приводит значение char:

char MyKeyChr = (char)e.KeyCode;

Более длинная и выразительная версия - вместо этого использовать один из классов преобразования, например System.Text.ASCIIEncoding.

Или вы даже можете использовать фактическую функцию VB.NET в C #, импортировав пространство имен Microsoft.VisualBasic. Это действительно необходимо, только если вы полагаетесь на некоторые специальные проверки, выполняемые методом ChrW под капотом, на которые вы, вероятно, не должны рассчитывать в любом случае. Этот код будет выглядеть примерно так:

char MyKeyChr = Microsoft.VisualBasic.Strings.ChrW(e.KeyCode);

Однако в этом случае не гарантируется, что вы получите именно то, что вам нужно (и ни один из них не был оригинальным кодом). Не все значения в перечислении Keys являются значениями ASCII, поэтому не все они могут быть непосредственно преобразованы в символ. В частности, кастинг Keys.NumPad1 эт. и др. char не даст правильное значение.

7 голосов
/ 19 мая 2011

Похоже, что эквивалент C # будет

var MyKeyChr = char.ConvertFromUtf32((int) e.KeyCode)

Однако e.KeyCode не содержит кодовую точку Unicode, поэтому это преобразование не имеет смысла.

3 голосов
/ 19 мая 2011

Самый буквальный способ перевести код - использовать функцию времени выполнения VB.Net из C #

MyKeyChr = Microsoft.VisualBasic.Strings.ChrW(e.KeyCode);

Если вы хотите избежать зависимости от среды выполнения VB.Net, вы можете использовать эту урезанную версию

MyKeyChr = Convert.ToChar((int) (e.KeyCode & 0xffff));
...