Как вставить Символ (фунт, евро, авторское право) в текстовое поле

Я могу использовать клавишу Alt с цифровой клавиатурой для ввода символов, но как программно вставить символ (фунт, евро, авторское право) в текстовое поле?

У меня есть экран конфигурации, поэтому мне нужно динамически создавать \uXXXX's.

enter image description here

Ответ 1

В С# символ символа 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, показанным здесь.

Ответ 2

Я не могу поверить, что это трудно найти в Интернете!

Для будущих разработчиков, если у вас есть символ Юникода, это легко сделать. например:

С#

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