问题描述
程序有个定时锁屏功能,锁屏对话框是全屏置顶的,锁屏后程序的很多线程可能会showdialog模式对话框出来,这样此时锁屏对话框就没法获取焦点去输入密码了,焦点就在后面的模式对话框上,那么就一直没法进入程序了。想请教一下各位大牛,能不能让锁屏对话框永远保有输入焦点,即使后面有模式对话框出来?急等各位大牛解答,多谢了!
解决方案
解决方案二:
定时器判断getforegroundwindow,如果不是自己,就把弹出的对话框发wm_close关闭。
解决方案三:
参考:KeepwindowontopandstealfocusinWinForms第一个回答是说用钩子什么的。后面的应该都是用定时器。
解决方案四:
c#对模态窗口的约定就是后弹出的先关闭,无法改变但你提到有多线程,线程间是没这个限制的,你只需要让那个锁屏窗口定时把自己Active就行了,甚至可以把锁屏窗口直接在新线程里打开Task.Run(()=>newLockForm1().ShowDialog());
解决方案五:
自动弹出的对话框应该是主线程根据条件产生的;能把锁屏放在工作线程吗?工作线程好像一般不能显示模态对话框,即使能用,能抢占主线程模态对话框的焦点吗?引用3楼phommy的回复:
c#对模态窗口的约定就是后弹出的先关闭,无法改变但你提到有多线程,线程间是没这个限制的,你只需要让那个锁屏窗口定时把自己Active就行了,甚至可以把锁屏窗口直接在新线程里打开Task.Run(()=>newLockForm1().ShowDialog());
解决方案六:
定时器还是无法抢占模态对话框的焦点;钩子到时可以考虑,只是用户体验差点,也只能这样了。引用2楼findcaiyzh的回复:
参考:KeepwindowontopandstealfocusinWinForms第一个回答是说用钩子什么的。后面的应该都是用定时器。
时间: 2024-10-23 10:23:04