|
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 45
|
||||||||||||||||
Событие Form_Deactivate не отрабатывает!21.11.2022, 20:15. Показов 1585. Ответов 23
Метки нет (Все метки)
Доброго вечера. Помогите, споткнулся на ровном месте. Нужно по событию Form_Deactivate вернуть язык ввода на предыдущий, который сохраняю немного раньше в событии Form_Activated
Вот тут сохраняю текущий язык ввода в переменную PrevCurrInputLanguage:
Добавлено через 46 минут Может событие Form_Deactivate в главной форме какое-то особенное? Ребят, неужели нет никаких версий?! В любом другом событии эта строка срабатывает.
0
|
||||||||||||||||
| 21.11.2022, 20:15 | |
|
Ответы с готовыми решениями:
23
DispatcherTimer не отрабатывает событие EventHandler Не отрабатывает событие в DataGridView Не отрабатывает событие CellValueChanged |
|
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 45
|
|
| 22.11.2022, 17:04 [ТС] | |
|
Ребята, ну неужели никто не подскажет, в чем фишка?! Есть еще одно наблюдение - если перед строкой изменения языка ввода в обработчике Form_Deactivate вызвать MessageBox.Show(), то после закрытия месседжа, язык все-таки меняется. Это магия какая-то просто!
0
|
|
|
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
|
||||||
| 22.11.2022, 18:16 | ||||||
|
bhl777, Так нужно?
В вывод данных смотрите при отладке, что у вас показывает.
0
|
||||||
|
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 45
|
|
| 22.11.2022, 19:06 [ТС] | |
|
Спасибо! Но не помогло! Я уже пробовал анализировать происходящее с помощью MessageBox. Дело в том, что судя по сообщениям вывода, язык меняется, но фактически раскладка не меняется, и значок языка в панели задач тоже не меняется, естественно. Чудеса продолжаются...
0
|
|
|
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
|
|
| 22.11.2022, 19:09 | |
|
bhl777, У меня все меняется и отображает раскладку, почему у вас так, история умалчивает.
1
|
|
|
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 45
|
|
| 22.11.2022, 20:22 [ТС] | |
|
Kazbek17, я в полном отчаянии! Сейчас дома за другим компьютером, создал чистое приложение WinForm, вставил только ваш код. Для чистоты эксперимента даже добавил Французскую раскладку ). Не работает!!! Срабатывают все обработчики: Form1_Load, Form1_Activated, textBox1_MouseClick - меняют раскладку и значок в панели задач. Все! Все, кроме Form1_Deactivate... При этом когда кликаешь за пределами формы, явно обработчик срабатывает, и в окне вывода язык якобы меняется, но по факту раскладка остается последней, которая была выбрана в других обработчиках событий формы. Исключительное что-то ...
![]() Добавлено через 10 минут Народ, помогите! Пожалуйста, попробуйте еще кто-нибудь у себя. Это 3 минуты займет. Может в Framework дело? у меня на 4.7.2 нацелено, win 10. Задолбался уже немного...
0
|
|
|
419 / 311 / 107
Регистрация: 30.08.2022
Сообщений: 1,195
|
|||||||
| 22.11.2022, 21:44 | |||||||
0
|
|||||||
|
fly
4953 / 4641 / 844
Регистрация: 13.04.2015
Сообщений: 9,834
|
||
| 22.11.2022, 22:52 | ||
|
Добавлено через 8 минут Я лет 8 назад занимался подобной проблемой, подробности уже помню смутно. Но для корректной смены языка клавиатуры пришлось использовать винапи функцию ActivateKeyboardLayout
0
|
||
|
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 45
|
|
| 23.11.2022, 10:14 [ТС] | |
|
brian778, В моем случае результат как раз стабильный - во всех случаях это срабатывает, кроме одного!
Добавлено через 3 минуты Меня бы даже устроило, если бы внутри приложения язык менялся, как мне надо. Но по факту, этого не происходит, он не меняется ни в системе ни в приложении. Но больше всего удручает, что эта строчка срабатывает везде, кроме единственного места, как будто это событие (Form1_Deactivate) чем-то радикально отличается от всех остальных
0
|
|
| 23.11.2022, 10:25 | ||
|
1. как Вы убеждаетесь, что языковые настройки не изменяются? 2. проверочный вывод в событии Deactivate наблюдаете? 3. Вы понимаете, что InputLanguage меняет языковые настройки потока приложения, а не системы?
0
|
||
|
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 45
|
|
| 23.11.2022, 10:52 [ТС] | |
|
Uswer,
1. Я проверяю язык ввода самым наглядным образом, ввожу текст где-то за пределами приложения. 2. Проверочный вывод события показывает, что язык изменяется, но по факту этого не происходит. 3. Возможно. Но почему тогда остальные события работают как мне нужно, и меняют язык где и когда мне нужно?! Добавлено через 13 минут Ничего не остается попробовать вызывать смену языка через WinAPI. Наверное действительно, вы правы. Когда срабатывает Form_deactivate, язык переключается только внутри самого приложения. Но почему тогда, если я снова переведу фокус на приложение, он все равно не тот, на который якобы внутри него самого он переключился?!. И почему все-таки во всех других местах он переключает раскладку и в приложении и в системе? Вопросов не меньше, короче...
0
|
|
| 23.11.2022, 10:55 | |||
|
Попробуйте сделать так: закомментируйте изменение языковых настроек везде кроме обработчиков событий клика одной из кнопок и Deactivate. Причём по клику кнопки устанавливайте вполне конкретный язык ввода, например французский, а в Deactivate например немецкий, при этом желательно чтобы основные языки системы не пересекались с этими, например были заданы русский и английский. Откройте любое другое приложение, например проводник или блокнот. Запустите ваше приложение и проконтролируйте, что система установила язык ввода по умолчанию, например русский. Кликните по кнопке и убедитесь, что язык ввода изменён на французский. Переключитесь на проводник, зафиксируйте язык ввода в нём. Переключитесь на ваше приложение и проверьте язык ввода, он должен быть немецким. Добавлено через 1 минуту
0
|
|||
|
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 45
|
|
| 23.11.2022, 11:35 [ТС] | |
|
Uswer, я не поленился и сделал именно так, как вы предложили. Похоже я вынужден вас разочаровать, но действительно при активации любого события в моем приложении, в котором я меняю установку языка, он меняется и за пределами моего приложения, и я ввожу в блокноте текст на том языке, который установил в своей программе. Но по-прежнему, при переключении на другое приложение, например, когда я переключаюсь в блокнот, язык не меняется, на тот, который я указал в событии Form_Deactivate.
НО! Сейчас внимание! Все, что мы здесь так долго обсуждали, работает прекрасно на Win7!
0
|
|
|
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 45
|
|
| 24.11.2022, 11:17 [ТС] | |
|
Народ, кто-то может все-таки помочь? Неужели ни разу, ни у кого не стоял вопрос - поменять язык в своей программе, а при смене фокуса на другое, приложение вернуть язык на первоначальный? Не ожидал, что такая задача окажется неразрешимой. Напомню, что на Win7 этот код работает прекрасно, а на Win10 нет. Я в тупике.
0
|
|
|
|
||
| 24.11.2022, 17:09 | ||
Сообщение было отмечено bhl777 как решение
Решение Люблю дурацкие задачи.Уточняющий вопрос: вы в своей программе меняете язык на Русский, потом переключаетесь на Блокнот и... Нужно чтобы он назад сменил на Английский? Если да, то вопросы: - смена языка в приложении, но почему это должно глобально то влиять? - в Вин10 есть опция, которая управляет сменой языка в разных приложениях. То есть можно сделать чтобы выбор был единый на всё, а можно чтобы в разных приложениях свой (у меня например так, чтобы не менять языки при переключении с чата на студию например). Теория. InputLanguage.CurrentInputLanguage Свойство на то и Current чтобы в текущем потоке меняться. А если нужно иное, то может быть глянуть на InputLanguage.DefaultInputLanguage Свойство?
2
|
||
|
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 45
|
||
| 24.11.2022, 18:06 [ТС] | ||
|
HF, добрый день. Спасибо за ваш отклик! Суть проста, пользователь работает за компьютером, при активации окна моего приложения, его текущая раскладка запоминается, а в моем приложении принудительно устанавливается на русский. Далее при при сворачивании или потери фокуса главного окна моей программы, нужно вернуть язык, который был, до активации окна моей программы. Вот вся задача.
В процессе ковыряний, я уже понял, что язык меняется конкретно для моего потока, и видимо по этому, в самый последний момент, когда срабатывает Form_Deactivate, язык вроде как меняется, но так как мы переключаемся на другой поток или куда-то там еще, для пользователя, он остается тем, который был установлен в моей программе. В данном случае на русский. Но все же меня убивает тот факт, что если во всех событиях кроме Form_Deactivate внутри своего приложения я меняю раскладку, то это не мешает мне за пределами моей программы вводить на языке, который установился именно в моем приложении.
0
|
||
|
|
|||
| 24.11.2022, 18:20 | |||
|
Добавлено через 2 минуты 1. Проверьте свойство с именем Default*. Оно близко к глобальному. 2. И мне кажется что такое в итоге придётся делать через WinAPI, так как это будет намного ближе к системным вызовам.
1
|
|||
|
0 / 0 / 0
Регистрация: 01.12.2015
Сообщений: 45
|
||||
| 24.11.2022, 19:41 [ТС] | ||||
|
Добавлено через 22 минуты HF, спасибо огромное!
0
|
||||
| 24.11.2022, 19:41 | |
|
Помогаю со студенческими работами здесь
20
Не отрабатывает событие Change Почему не отрабатывает событие мыши ? Событие клика отрабатывает несколько раз
innerHTML 'забивает' событие (к примеру, ondblclick - отрабатывает один только раз). Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор по наименованию группы. . .
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит значение перечислений.
/ / Событие "НачалоВыбора" реквизита на форме. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|