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
相关产品推荐
相关产品推荐

