Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 9
1

Не печатается кириллица при вводе с клавиатуры в ActiveX компоненте

04.12.2015, 16:06. Показов 1088. Ответов 12
Метки нет (Все метки)

Здравствуйте, форумчане.
Краткое описание проблемы:
1.Сделал элемент управления ActiveX в Microsoft Visual C# 2012
2. Добавил в это же решение Windows Forms приложение, разместил там созданную сборку - все работает нормально.

Пытаюсь работать со своей сборкой в стороннем приложении и тут начинаются проблемы.
На элементах текстового ввода (textbox, richtext) при наборе с клавиатуры не печатается кириллица, вместо нее печатается латиница.

Вот пример
Набираю
Привет
Печатается
Ïðèâåò

Причем если набрать в блокноте на русском, скопировать и вставить в textbox - вставляется нормально.
CultureInfo.CurrentCulture выдает ru-RU

Мне кажется проблема должна быть распространенной, но нигде решения не смог найти (или не так искал).

Спасибо за любую помощь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2015, 16:06
Ответы с готовыми решениями:

Только кириллица печатается в Windows'e и Explorer'e.
У меня на Ноутбуке с русской версией Windows ME невозможно печатать латинские буквы в Windows, а...

ActiveX Control, при нажатии кнопки в самом компоненте должно открыться модальное диалоговое окно в которое передается дата из UserControla
Здравствуйте. Помогите если кто знает. Есть такая проблема. Я написал ActiveX control в VB6 и...

Составить программу, которая при вводе символа с клавиатуры выво-дит "латинская буква" при вводе латинской буквы и "не латинская бук-ва" во всех остал
Составить программу, которая при вводе символа с клавиатуры выво-дит "латинская буква" при вводе...

Поиск в самом компоненте DBGrid при наборе с клавиатуры?
Здравствуйте друзья. Как реализовать поиск в самом гриде. Отобразив данные в сетке грида я...

12
TheGreatCornholio
1235 / 715 / 283
Регистрация: 30.07.2015
Сообщений: 2,392
04.12.2015, 16:12 2
Цитата Сообщение от Fallout13 Посмотреть сообщение
Пытаюсь работать со своей сборкой в стороннем приложении
Как, где? Что за приложение?
0
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 9
04.12.2015, 16:36  [ТС] 3
Вставляю как ActiveX
Приложения довольно специфичные, поэтому не озвучил.
Например Citect, InTouch (и там и там наблюдается одинаковая проблема с кириллицей у моего компонента). Проблема не в этих приложениях ибо если туда вставить, например Microsoft Rich TextBox Control V6 то туда кириллица с клавиатуры вводиться нормально.

Если существует ли какой-то "универсальный" контейнер под activeX подскажите - пропробую и там.
0
TheGreatCornholio
1235 / 715 / 283
Регистрация: 30.07.2015
Сообщений: 2,392
04.12.2015, 16:44 4
Цитата Сообщение от Fallout13 Посмотреть сообщение
Приложения довольно специфичные, поэтому не озвучил.
Например Citect, InTouch (и там и там одинаковая проблема с кириллицей).
То есть сторонние проги не ваши и хавают ваш activex компонет в качетве чего то там? (плагина допустим).
Тогда должна быть документация, это раз.

Если сторонние приложения не .NET, - то проблема мб в том, что там кодировка, отличная от C#, где char - двухбайтный unicode.
В компоненте можно попробовать использовать кодировку стороннего приложения при написании и построении.
0
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 9
04.12.2015, 16:53  [ТС] 5
Еще раз уточню проблема не в связке стороннего приложения и моего activex (свойства, события и методы работают как надо).
Проблема в графической части моего компонента (элементы editbox, richtext) - туда с клавиатуры нормально не вводится кириллица.
0
TheGreatCornholio
1235 / 715 / 283
Регистрация: 30.07.2015
Сообщений: 2,392
04.12.2015, 17:04 6
Цитата Сообщение от Fallout13 Посмотреть сообщение
Еще раз уточню
Уточнил так, что я еще больше ничего не понял.

Цитата Сообщение от Fallout13 Посмотреть сообщение
Добавил в это же решение Windows Forms приложение, разместил там созданную сборку - все работает нормально.
Цитата Сообщение от Fallout13 Посмотреть сообщение
Пытаюсь работать со своей сборкой в стороннем приложении и тут начинаются проблемы.
По-видимому:
Твой компонент и твое приложение работают в одной кодировке. - Все норм.
Твой компонент работает с C# .NET Unicode 2 байта, а стороннее - допустим с ANSI. - Все плохо.

Добавлено через 3 минуты
Цитата Сообщение от Fallout13 Посмотреть сообщение
туда с клавиатуры нормально не вводится кириллица.
Похоже нажатия клавиатуры обрабатываются магией приложения.

Цитата Сообщение от Fallout13 Посмотреть сообщение
Причем если набрать в блокноте на русском, скопировать и вставить в textbox - вставляется нормально.
А вставки по другому как-то.

Нужно научить твои текстбоксы в компоненте понимать кодировку сторонней проги при вводе, - я так думаю.
1
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 9
04.12.2015, 17:22  [ТС] 7
Ловить клавиши и менять
00F4 00E1 00E2
на
0430 0431 0432 ...?

Думал уже об этом, но надеялся что есть более цивилизованный метод ).
0
TheGreatCornholio
1235 / 715 / 283
Регистрация: 30.07.2015
Сообщений: 2,392
04.12.2015, 17:48 8
Цитата Сообщение от Fallout13 Посмотреть сообщение
Думал уже об этом, но надеялся что есть более цивилизованный метод ).
Проделай нецивилизованный сначала - да ваще любой, чтобы диагносцировать причину наверняка.
Потом ищи цивилизованный уже.

Цитата Сообщение от Fallout13 Посмотреть сообщение
Ловить клавиши и менять
Это сработало?

Добавлено через 24 минуты
Не на всех проверяй А то понесет еще не туда.
Попробуй еще в KeyDown или KeyPress принятый char перекодировать в юникод и лишь потом добавлять к строке.
1
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 9
04.12.2015, 19:01  [ТС] 9
Извиняюсь за долгое отсутствие.
Сделал на событие нажатия клавиатуры в элементе ввода подмену нажатого символа.

Некрасиво но работает...
0
TheGreatCornholio
1235 / 715 / 283
Регистрация: 30.07.2015
Сообщений: 2,392
04.12.2015, 20:10 10
Цитата Сообщение от Fallout13 Посмотреть сообщение
но работает...
Ну причину вкурили хотя бы.

Теперь подумаем над толковым исправлением..

К какой кодировке работает сторонняя прога? Что на что меняешь?
0
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 9
05.12.2015, 08:41  [ТС] 11
как то так

if ((Convert.ToInt32(e.KeyChar) <= 255) && (Convert.ToInt32(e.KeyChar) > 192))
{
e.KeyChar = Encoding.GetEncoding(1251).GetChars(new byte[] { Convert.ToByte(e.KeyChar) })[0];
}
0
TheGreatCornholio
1235 / 715 / 283
Регистрация: 30.07.2015
Сообщений: 2,392
05.12.2015, 11:54 12
Fallout13, особо в голову ничего не пришло, кроме подмены клавиш.
Так будет работать?
C#
1
2
byte[] bytes = { (byte)(e.KeyChar), (byte)(e.KeyChar >> 8) }; //пошамань тут с порядком байт 
e.KeyChar = Encoding.GetEncoding(1251).GetString(bytes).First();
И вопрос возник, - прога сторонняя потом читает норм с твоего текстбокса или это не требуется?
0
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 9
05.12.2015, 13:47  [ТС] 13
Ну как сказать - такой вариант в сторонней проге работает, а в C# нет ).

Связь между приложениями (property через dispid) через латиницу - работало сразу как и должно.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2015, 13:47

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Ошибка при вводе с клавиатуры
k=13 while True: answer=input(&quot;Введите число:&quot;) if answer==&quot;exit&quot;: break ...

Фокусировка при вводе с клавиатуры
Ребята выручайте такая проблема. Есть WPF форма хочу сделать так, начинаю вводить с клавы он сразу...

Программа выдает разные результаты при присваивании значения переменной в коде и при вводе с клавиатуры
Просто вопрос. У меня программа выдает разные результаты при присваивании значения переменной в...

Как доступиться к ActiveX компоненте?
Вот я кидаю на ASP (в InterDev'е) компоненту, например, TreeView. Как мне менять в коде (VB Script)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.