原因
如果在nanui 的 window 意外还额外打开了别的 winform 窗体
就很有可能导致 明明input输入框已经获得了焦点 却始终无法输入的问题
如何解决
只需要在 nanui 窗体 失去焦点的时候 , 在让其获得焦点即可
但是这样有一个缺点就是 打开的调试窗口 也会被nanui 窗口覆盖导致无法调试
所以,在debug的时候 建议关闭防失焦处理
第一
在nanui mainwindow 的 OnReady 下添加代码:
protected override void OnReady()
{
//在不是调试的时候开启 防失焦
if (!isDebug)
{
Form form = (Form)HostWindow;
form.Deactivate += Form_Deactivate;
}
}
如果使用的是最新版本的 nanui 需要这样写:
Form form = (Form)Form.FromHandle(HostWindowHandle);
form.Deactivate += Form_Deactivate;
第二
在nanui mainwindow 下添加2个方法:
private void Form_Deactivate(object sender, System.EventArgs e)
{
SendFocus();
}
public void SendFocus()
{
Form form = (Form)HostWindow;
form.Activate();
form.Focus();
CefKeyEvent cefKeyEvent = new CefKeyEvent
{
EventType = CefKeyEventType.KeyDown,
WindowsKeyCode = 0,
Modifiers = CefEventFlags.None
};
GetHost().SendKeyEvent(cefKeyEvent);
}
当NanUI窗口与其他Winform窗体同时打开时,可能导致输入框无法输入。解决方法是在NanUI窗体失去焦点时重新激活并聚焦。在OnReady方法中添加代码,监测窗体状态,并在失去焦点时调用SendFocus方法,通过CefKeyEvent模拟键盘事件恢复焦点。在调试期间,建议关闭防失焦处理以方便调试。
1829





