C# TreeView点击空白处打开窗口无法获取焦点问题求助
解决TreeView点击任意区域打开新窗口无法获取焦点的问题
- 核心问题:
MouseDown事件执行过程中,原窗体后续的焦点逻辑会抢占新窗口的焦点,直接调用Show()、SetFocus()等方法无效 - 解决方案:使用
BeginInvoke异步触发新窗口的显示操作,让当前MouseDown事件完全处理完毕后再打开窗口
代码示例(C# WinForms)
在TreeView的MouseDown事件中修改代码:
private void treeView1_MouseDown(object sender, MouseEventArgs e) { // 异步执行窗口显示,避免当前事件抢占焦点 this.BeginInvoke(new Action(() => { formBOM form = new formBOM(); form.Show(); form.Focus(); // 此时可以正常获取焦点 })); }
额外说明
如果需要仅在点击空白区域时触发(点击节点不执行),可以先判断点击位置是否命中节点:
private void treeView1_MouseDown(object sender, MouseEventArgs e) { TreeNode hitNode = treeView1.GetNodeAt(e.X, e.Y); // 仅点击空白区时触发窗口打开 if (hitNode == null) { this.BeginInvoke(new Action(() => { formBOM form = new formBOM(); form.Show(); form.Focus(); })); } }
内容的提问来源于stack exchange,提问作者user27246674
相关产品推荐
相关产品推荐

