То, что вы спрашиваете, по сути невозможно. Как только вы поймете, как работают модальные диалоги (формы, которые отображаются с использованием метода ShowDialog
, являются модальными), вы поймете, почему. Модальный диалог используется, когда вы хотите заставить пользователя взаимодействовать только с этим диалогом. Он не позволяет им взаимодействовать с любыми другими окнами в вашем приложении, отключая эти окна. Они становятся невосприимчивыми к щелчкам мыши, не получают ввод с клавиатуры и не могут получить фокус. Windows подает звуковой сигнал и мигает в строке заголовка модального диалогового окна, когда вы пытаетесь, это неощутимый способ покачать головой и сказать «нет, нет, нет».
То, что здесь происходит, заключается в том, что когда вы отображаете форму «Депозиты» в виде модального диалога с использованием метода ShowDialog
, все другие окна в вашем приложении отключаются. В вашем конкретном случае это означает, что окно, содержащее вашу экранную клавиатуру, также отключено и не может получать события щелчка мышью. Вот почему ничего не происходит, когда вы пытаетесь нажать на его «клавиши» (кнопки).
Самый простой обходной путь (как я предложил в комментарии) - показать форму «Депозиты» в виде не -модального диалога, используя вместо этого метод Show
. В отличие от модального диалога, это не отключит другие окна в вашем приложении, позволяя пользователю взаимодействовать со всеми из них одновременно. Нажатие на другое окно установит фокус на это окно и позволит ему обрабатывать входные события. Но вы говорите, что это не работает для вас, потому что вы хотите, чтобы форма «Депозиты» отключала все элементы управления в главном окне, но не вашей экранной клавиатуре.
Конечно, я солгал в начале, когда сказал, что это "невозможно". Я имел в виду, что это очень сложно и потребует от вас работы со стандартной моделью интерактивности Windows. Пара идей
о том, как вы могли бы сделать эту весну на ум:
Вы можете использовать утилиту экранной клавиатуры, которая входит в состав всех последних версий Windows. Microsoft уже предоставляет программу для этой цели. Вам не нужно создавать и поддерживать свою собственную, она уже включает в себя всю необходимую логику, чтобы предотвратить кражу фокуса, когда пользователь нажимает на одну из своих «клавиш», и поскольку она не является частью вашей программы, она не будет отключен, когда вы отображаете формы как модальные с использованием метода ShowDialog
. Чтобы проверить это, перейдите в Пуск -> Выполнить и введите osk
.
Например, в Windows 7 это выглядит примерно так:
Если вы настаиваете на использовании собственной, специально разработанной экранной клавиатуры, вам придется показывать ее как дочернее окно вашего модального диалога. То есть ваше приложение начинается с его основной формы, как обычно. Затем при отображении формы «Депозиты» в виде модального диалога с использованием метода ShowDialog
основная форма отключается. Из формы «Депозиты» можно отобразить форму экранной клавиатуры, используя метод non -modal Show
. Основная форма все еще отключена, потому что она показывает модальное диалоговое окно (форма «Депозиты»). Но форма «Депозиты» не отключена, потому что в ней отображается не -модальное диалоговое окно (ваша экранная клавиатура).