14

在 VB.NET 2008 中,我使用了以下语句:

MyKeyChr = ChrW(e.KeyCode)

现在我想把上面的语句转换成 C#。

有任何想法吗?

4

4 回答 4

20

在 C# 中的快速和肮脏的等价物ChrW只是将值转换为char

char MyKeyChr = (char)e.KeyCode;

更长且更具表现力的版本是使用其中一种转换类,例如System.Text.ASCIIEncoding.

或者,您甚至可以通过导入Microsoft.VisualBasic命名空间来使用 C# 中的实际 VB.NET 函数。只有当您依赖底层ChrW方法执行的一些特殊检查时,这才是真正需要的,您可能无论如何都不应该指望这些检查。该代码看起来像这样:

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

但是,在这种情况下,这并不能保证完全生成您想要的内容(原始代码也不是)。枚举中并不是所有的值Keys都是ASCII值,所以也不是所有的都可以直接转换成字符。特别是铸造Keys.NumPad1等。人。tochar不会产生正确的值。

于 2011-05-19T14:58:03.063 回答
9

看起来 C# 等价物是

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

但是,e.KeyCode它不包含 Unicode 代码点,因此这种转换是没有意义的。

于 2011-05-19T14:59:14.743 回答
4

翻译代码最直接的方法是使用 C# 中的 VB.Net 运行时函数

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

如果您想避免对 VB.Net 运行时的依赖,尽管您可以使用这个精简版

MyKeyChr = Convert.ToChar((int) (e.KeyCode & 0xffff));
于 2011-05-19T14:58:20.273 回答
1

的 C# 等价物ChrW(&H[YourCharCode])Strings.ChrW(0x[YourCharCode])

您可以使用https://converter.telerik.com/在 VB 和 C# 之间进行转换。

于 2021-02-04T10:29:28.403 回答