Я могу использовать клавишу Alt с цифровой клавиатурой для ввода символов, но как программно вставить символ (фунт, евро, авторское право) в текстовое поле?
У меня есть экран конфигурации, поэтому мне нужно динамически создавать \uXXXX's.
Я могу использовать клавишу Alt с цифровой клавиатурой для ввода символов, но как программно вставить символ (фунт, евро, авторское право) в текстовое поле?
У меня есть экран конфигурации, поэтому мне нужно динамически создавать \uXXXX's.
В С# символ символа Unicode \uXXXX
, где X
- шестнадцатеричные символы, позволяет указывать символы Unicode. Например:
\u00A3
- знак Фунта, £.\u20AC
- знак евро, €.\u00A9
является символом авторского права, ©.Вы можете использовать эти символы символов Юникода, как и любой другой символ в строке.
Например, "15 \u00A3 per item"
будет строкой "15 £ за элемент".
Вы можете поместить такую строку в текстовое поле так же, как и с любой другой строкой.
Примечание. Вы также можете просто скопировать (Ctrl + C) символ с веб-сайта, например Википедия (Знак фунта), а затем вставьте (Ctrl + V) его непосредственно в строковый литерал в файл исходного кода С#. Файлы исходного кода на С# используют Unicode изначально. Этот подход полностью избавляет вас от необходимости даже знать четыре шестнадцатеричных цифры для символа, который вы хотите.
Чтобы параллелизировать приведенный выше пример, вы можете сделать тот же строковый литерал, что и просто "15 £ per item"
.
Изменить: Если вы хотите динамически создавать символ Юникода из его шестнадцатеричной строки, вы можете использовать это:
public static char HexToChar(string hex)
{
return (char)ushort.Parse(hex, System.Globalization.NumberStyles.HexNumber);
}
Например, HexToChar("20AC")
получит знак Euro.
Если вы хотите выполнить противоположную операцию динамически:
public static string CharToHex(char c)
{
return ((ushort)c).ToString("X4");
}
Например, CharToHex('€')
получит вас "20AC"
.
Выбор ushort
соответствует диапазону возможных значений char
, показанным здесь.
Я не могу поверить, что это трудно найти в Интернете!
Для будущих разработчиков, если у вас есть символ Юникода, это легко сделать. например:
С#
var selectionIndex = txt.SelectionStart;
string copyrightUnicode = "00A9";
int value = int.Parse(copyrightUnicode, System.Globalization.NumberStyles.HexNumber);
string symbol = char.ConvertFromUtf32(value).ToString();
txt.Text = txt.Text.Insert(selectionIndex, symbol);
txt.SelectionStart = selectionIndex + symbol.Length;
VB.Net
Dim selectionIndex = txt.SelectionStart
Dim copyrightUnicode As String = "00A9"
Dim value As Integer = Integer.Parse(copyrightUnicode, System.Globalization.NumberStyles.HexNumber)
Dim symbol As String = Char.ConvertFromUtf32(value).ToString()
txt.Text = txt.Text.Insert(selectionIndex, symbol)
txt.SelectionStart = selectionIndex + symbol.Length