You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 15:07:04