Исправить кодировку в тексте элемента Help - C# (WinForms)

У меня осуществлено событие редакции текста в TextBox: при вводе в текстовое поле неверных символов происходит его удаление и появление всплывающего окна (по аналогии с проводником). Проблема заключается в том, что при написании кириллицей в тексте элемента Help текст конвертируется во что-то непонятное. Каким образом это можно исправить? Код с фото прикрепляю ниже:

Код:

private void BookmarkNameTextBox_TextChanged(object sender, EventArgs e)
{
    if (Regex.IsMatch(BookmarkNameTextBox.Text, @"[\\, /, :, *, ?, "", <, >, |]"))
    {
        BookmarkNameTextBox.Text = BookmarkNameTextBox.Text.Remove(BookmarkNameTextBox.Text.Length - 1);
        BookmarkNameTextBox.SelectionStart = BookmarkNameTextBox.TextLength;
        
        Help.ShowPopup(BookmarkNameTextBox, @$"Название закладки не может содержать следующие символы: \ / : * ? "" < > |", new Point(this.Location.X + 95, this.Location.Y + 70 + BookmarkNameTextBox.Height));
    }
}

Та самая абракадабра

Понимаю, что что-то нужно осуществлять с конвертацией текста из одной кодировки в другую, но, если честно, из того что я просмотрел, мне ничего не понятно, - для меня это из области чего-то недосягаемого.


Ответы (1 шт):

Автор решения: Chaos_Sower

*Оффтоп. Замените вашу строку в коде на следующую: if (Regex.IsMatch(BookmarkNameTextBox.Text, @"[\\,/,:,*,?,"",<,>,|]")) , а то ваш код будет "браковать" вводимые в TextBox пробелы.

Смотрите, есть два сту... варианта решения вашей проблемы:

Первый - попытаться исправить кодировку системными средствами, а именно: открыть панель управления -> перейти к региональным стандартам -> открыть вкладку дополнительно -> нажать кнопку "Изменить язык системы..." -> поставить галочку в пункте "Бета-версия: Использовать Юникод (UTF-8) для поддержки языка во всём мире". После этого перезагрузите ваш компьютер и попробуйте запустить ваше приложение снова. Системный способ

Сразу отмечу, что данный метод почти совсем НЕ ПОМОГ - кодировка изменилась на другую, но кириллица по прежнему не отображается корректно (возможно, если покопаться с изменённой кодировкой, то вам каким-нибудь образом удастся добиться корректного отображения текста).

Второй, рабочий способ - человек столкнулся с аналогичной проблемой, только у него персидский язык. Вы просто скачивайте его архив по данной ссылке - https://www.reza-aghaei.com/windows-forms-helpprovider-add-unicode-support/, добавляете ссылку в своём проекте на файл-exe его приложения и используете новый элемент - HelpExtensions. Принимаемые параметры данного элемента ничем не отличаются от вашего стандартного элемента Help (да, собственно, они и одинаковы).

Алгоритм добавление ссылок я описал ниже:

Добавление ссылки

Вызов элемента

Строка в коде вашего приложения:

string stroka = "Название закладки не может содержать следующие символы"; HelpProvider2Example.HelpExtensions.ShowPopup2(BookmarkNameTextBox, stroka, new(Location.X + 95, Location.Y + 70 + BookmarkNameTextBox.Height));

Собственно, вот как отображается текст с кириллицей после применения второго способа:Доказательство

*Оффтоп. На будущее, постарайтесь рассчитывать на себя, потратьте время, поищите решение вашей проблемы в интернете, даже если на первый взгляд кажется, что решения нет, - не стоит первым делом задавать вопрос на Stack Overflow.

*Оффтоп. Забавно, решение данной проблемы было повторно найдено спустя ровно год. Забавно

→ Ссылка