Исправить кодировку в тексте элемента 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 шт):
*Оффтоп. Замените вашу строку в коде на следующую: 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.
*Оффтоп. Забавно, решение данной проблемы было повторно найдено спустя ровно год.



