In VB.NET 2008, I used the following statement:
MyKeyChr = ChrW(e.KeyCode)
Now I want to convert the above statement into C#.
Any Ideas?
In VB.NET 2008, I used the following statement:
MyKeyChr = ChrW(e.KeyCode)
Now I want to convert the above statement into C#.
Any Ideas?
Looks like the C# equivalent would be
var MyKeyChr = char.ConvertFromUtf32((int) e.KeyCode)
However, e.KeyCode
does not contain a Unicode codepoint, so this conversion is meaningless.
The quick-and-dirty equivalent of ChrW
in C# is simply casting the value to char
:
char MyKeyChr = (char)e.KeyCode;
The longer and more expressive version is to use one of the conversion classes instead, like System.Text.ASCIIEncoding
.
Or you could even use the actual VB.NET function in C# by importing the Microsoft.VisualBasic
namespace. This is really only necessary if you're relying on some of the special checks performed by the ChrW
method under the hood, ones you probably shouldn't be counting on anyway. That code would look something like this:
char MyKeyChr = Microsoft.VisualBasic.Strings.ChrW(e.KeyCode);
However, that's not guaranteed to produce exactly what you want in this case (and neither was the original code). Not all the values in the Keys
enumeration are ASCII values, so not all of them can be directly converted to a character. In particular, casting Keys.NumPad1
et. al. to char
would not produce the correct value.
char
for example). Boundary cases to be sure but a cast is not a direct equivalent –
Feola Looks like the C# equivalent would be
var MyKeyChr = char.ConvertFromUtf32((int) e.KeyCode)
However, e.KeyCode
does not contain a Unicode codepoint, so this conversion is meaningless.
The most literal way to translate the code is to use the VB.Net runtime function from C#
MyKeyChr = Microsoft.VisualBasic.Strings.ChrW(e.KeyCode);
If you'd like to avoid a dependency on the VB.Net runtime though you can use this trimmed down version
MyKeyChr = Convert.ToChar((int) (e.KeyCode & 0xffff));
Microsoft.VisualBasic
is just a class in the BCL. Using it from a C# program doesn't really add an extra dependency; the compiler will fully quality all imported references anyway. –
Blades Microsoft.VisualBasic.dll
often involves walking a fine line of terms. From VB.Net's perspective it is a runtime DLL (in the docs and users minds). The language has heavy runtime dependencies on behavior in that DLL. Parts of it are simply inseparable from the underlying language semantics. But yes it can be confusing when considering terms like "the .Net runtime". Note though that C#'s 4.0 assembly for dynamic support is also referred to as the C# runtime DLL in many docs. –
Feola System.Windows.Forms
and System.Management
. –
Feola The C# equivalent of ChrW(&H[YourCharCode])
is Strings.ChrW(0x[YourCharCode])
You can use https://converter.telerik.com/ do convert between VB & C#.
This worked for me to convert VB:
e.KeyChar = Microsoft.VisualBasic.ChrW(13)
To C#:
e.KeyChar == Convert.ToChar(13)
© 2022 - 2025 — McMap. All rights reserved.