c#winform点击菜单时只显示一个子窗体,并把子窗体放在panel1里
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#winform点击菜单时只显示一个子窗体,并把子窗体放在panel1里相关的知识,希望对你有一定的参考价值。
bool opened = false;
foreach (Form f in Application.OpenForms)
if (f is frmClientdata)
opened = true;
break;
if (!opened)
new frmClientdata().Show();
这是只显示一个子窗体,要怎么改?
给你大师级代码:
(from Form f in Application.OpenFormslet opened = f is Form && f.Name == "窗体名称"
where opened
select f).ToList().ForEach(f =>
f.TopLevel = false;
panel1.Controls.Add(f);
f.Show();
);
PS:我的Form就是你的frmClientdata
追问不能转换呀
参考技术A Form2 form=new Form2();//Form2是你的子窗口form.Toplevel=false;
this.Controls.add(form);//this是你的主窗口
form.Show();追问
不行
追答把你代码贴出来看看
追问不是在上面吗?
追答你在代码里面是如何把子窗口嵌入到父窗口的代码。。晕
追问frmClientdata frmC = new frmClientdata();
frmC.TopLevel = false;
frmC.Parent = this.panel1;
frmC.Show();
这个就能嵌入panel1,但窗体可以打开多个
我不是用的子父窗口,MDI那个窗体局限性太强了,
我用的那个不是mdi窗口,你这样
this.panel1.Controls.Clear();
Form2 form=new Form2();//Form2是你的子窗口
form.Toplevel=false;
this.panel1.Controls.add(form);//this是你的主窗口
form.Show();
每次把窗口嵌入到panel之前先清空一下panel上的控件
Winform开发中的窗体重复及灵活切换问题
Winform开发中的窗体重复及灵活显示问题
1.问题引入
在项目中需要实现主窗体点击按钮后打开子窗体,但是如果不限制的话每次点击都会打开一个新窗体,用户体验不好还浪费内存。所以这里要做的是限制每个子窗体只可以打开一次,如果打开后没有关闭子窗体或者子窗体被最小化了,就直接把已打开的窗体激活并置顶显示。同时还要满足不同的子窗体是可以共存的,也就是只能同时有一个子窗体A,子窗体B,子窗体C……但是子窗体ABC之间是可以同时存在并互相切换的。
2.解决思路
这里我的做法是写两个方法:ShowOpenForm()用来激活已打开的窗体,同时返回Boolean值对应当前窗体的打开状态,NewForm()用于第一次打开新窗体的时候实例化窗体对象,并设置相关参数。
3.参考代码
整体结构
ShowOpenForm()方法:
1 private Boolean ShowOpenForm(string frmName) 2 { 3 //Application .OpenForms为已打开的窗体 4 foreach (Form frm in Application.OpenForms) 5 { 6 if (frm.Name == frmName)//如果传递的窗体名称参数已经存在 7 { 8 frm.Activate();//激活已有窗体 9 if (frm.WindowState == FormWindowState.Minimized)//如果已有窗体被最小化了 10 { 11 frm.WindowState = FormWindowState.Normal;//恢复被最小化窗体的显示 12 } 13 return false;//返回false说明窗体已打开 14 } 15 } 16 return true;//已打开的窗体里没有作为参数传递的窗体,则返回true 17 }
NewForm()方法:
1 private void NewForm(Form objForm) 2 { 3 objForm.Show();//显示要打开的窗体的 4 objForm.Top = objForm.Top + 64;//项目需要,显示界面下移64像素 5 }
示例Click事件:
1 private void tsbVoucherQuery_Click(object sender, EventArgs e) 2 { 3 if (ShowOpenForm("FrmVoucherQuery"))//如果返回的Boolean值为true,则窗体没打开,调用NewForm()方法 4 { 5 NewForm(new FrmVoucherQuery()); //调用打开新窗体方法,并直接实例化要打开的窗体作为参数窗体 6 } 7 }
以上是关于c#winform点击菜单时只显示一个子窗体,并把子窗体放在panel1里的主要内容,如果未能解决你的问题,请参考以下文章