WINFORM 子窗体调用父窗体

yj01263431 2015-04-07 07:21:34

右侧区域是嵌套的子窗体,点击左边按钮的时候可以切换不同的子窗体
但是如果是点子窗体的按钮切换就不管用了?为啥

子窗体代码按钮点击
FrmMain frmMain = new FrmMain();
FrmView frmView = new FrmView();
frmMain.ChangePanel(frmView);

父窗体函数
public void ChangePanel(Form frm)
{
frm.FormBorderStyle = FormBorderStyle.None;
frm.Dock = DockStyle.Fill;
frm.TopLevel = false;
this.pnlMain.Controls.Clear();
this.pnlMain.Controls.Add(frm);
frm.Show();
}
...全文
84 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你跟踪下就知道了,他们是一层层包含的 this是当前form,不是按钮
yj01263431 2015-04-07
  • 打赏
  • 举报
回复
Control p = this; 是获得按钮本身吗? p = p.Parent; 不是获得panel吗 为什么遍历之后可以获得FrmMain呢
  • 打赏
  • 举报
回复
Control p = this;
FrmMain frmMain=null;
do{
   p = p.Parent;
   if(p is FrmMain ){
           frmMain = (FrmMain)p;
           break;
   }
}
while(p!=null)
if(frmMain !=null){
FrmView frmView = new FrmView();
frmMain.ChangePanel(frmView);
}
while少打了
  • 打赏
  • 举报
回复
那就While循环一直找Parent
Control p = this;
FrmMain frmMain=null;
do{
   p = p.Parent;
   if(p is FrmMain ){
           frmMain = (FrmMain)p;
           break;
   }
}
if(frmMain !=null){
FrmView frmView = new FrmView();
frmMain.ChangePanel(frmView);
}
while(p!=null)
yj01263431 2015-04-07
  • 打赏
  • 举报
回复
子窗体是嵌套在父窗体的panel里的 FrmMain frmMain = this.Parent as FrmMain; 用这个获取到为null啊
  • 打赏
  • 举报
回复
通过Parent来找到主窗体,而不是new一个新的主窗体
FrmMain frmMain = this.Parent  as FrmMain;
if(frmMain !=null){
FrmView frmView = new FrmView();
frmMain.ChangePanel(frmView);
}

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧