Что такое C# эквивалент ChrW(e.KeyCode)?
В VB.NET 2008 я использовал следующее утверждение:
MyKeyChr = ChrW(e.KeyCode)
Теперь я хочу преобразовать приведенное выше утверждение в C#.
Есть идеи?
5 ответов
Похоже, эквивалент C# будет
var MyKeyChr = char.ConvertFromUtf32((int) e.KeyCode)
Тем не мение, e.KeyCode
не содержит кодовую точку Unicode, поэтому это преобразование не имеет смысла.
Быстрый и грязный эквивалент 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
не будет производить правильное значение.
Самый буквальный способ перевести код - использовать функцию времени выполнения VB.Net из C#
MyKeyChr = Microsoft.VisualBasic.Strings.ChrW(e.KeyCode);
Если вы хотите избежать зависимости от времени выполнения VB.Net, вы можете использовать эту урезанную версию
MyKeyChr = Convert.ToChar((int) (e.KeyCode & 0xffff));
C#-эквивалент
ChrW(&H[YourCharCode])
является
Strings.ChrW(0x[YourCharCode])
Вы можете использовать https://converter.telerik.com/ для преобразования между VB и C#.
Это сработало для меня, чтобы преобразовать VB:
e.KeyChar = Microsoft.VisualBasic.ChrW(13)
В С#:
e.KeyChar == Convert.ToChar(13)