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

C#中在其他Panel打开Form无响应问题求助

问题分析与解决

你的代码执行后无反应,核心原因是创建了全新的Frm_Main实例,而非操作当前已经显示的主窗体。你在双击事件里新建的Main是未显示的空白窗体,往它的Pnl_Main添加控件自然不会在现有界面上呈现任何变化。

修正方案

方案一:获取当前已打开的主窗体实例

通过Application.OpenForms找到正在运行的主窗体实例,替换新建实例的代码:

private void DGV_Pat_MouseDoubleClick(object sender, MouseEventArgs e)
{
    PL.History.Frm_History Frm = new PL.History.Frm_History()
    {
        TopLevel = false
    };
    // 获取已打开的主窗体实例
    PL.MainPage.Frm_Main Main = Application.OpenForms.OfType<PL.MainPage.Frm_Main>().FirstOrDefault();
    if (Main != null)
    {
        if (Main.Pnl_Main.Controls.Count > 0)
            Main.Pnl_Main.Controls.Clear();
        Main.Pnl_Main.Controls.Add(Frm);
        Frm.BringToFront();
        Frm.Show();
    }
}

方案二:通过窗体引用传递

如果包含DataGridView的窗体是主窗体打开的子窗体,可在构造时传入主窗体引用,避免查找实例的操作:

// 假设当前窗体为Frm_Pat,构造函数接收主窗体引用
private PL.MainPage.Frm_Main _mainForm;
public Frm_Pat(PL.MainPage.Frm_Main mainForm)
{
    InitializeComponent();
    _mainForm = mainForm;
}

// 双击事件直接使用主窗体引用
private void DGV_Pat_MouseDoubleClick(object sender, MouseEventArgs e)
{
    PL.History.Frm_History Frm = new PL.History.Frm_History()
    {
        TopLevel = false
    };
    if (_mainForm.Pnl_Main.Controls.Count > 0)
        _mainForm.Pnl_Main.Controls.Clear();
    _mainForm.Pnl_Main.Controls.Add(Frm);
    Frm.BringToFront();
    Frm.Show();
}

额外检查项

  • 确认DGV_Pat的MouseDoubleClick事件已在设计器中正确绑定到该方法;
  • 将Frm_History的FormBorderStyle设置为None,避免作为子控件显示时出现样式异常。

内容的提问来源于stack exchange,提问作者ibrahem rmadan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:18:00