c#窗体的调用问题

hanzhaorui 2007-03-09 04:24:12
private void menuItemAdd_Click(object sender, System.EventArgs e)
{
frmMDI1.frmForm1 form1=new frmMDI1.frmForm1(this);
form1.Show();
}

我用这个语句从主窗口中调用子窗体,结果是点一次出来一个窗体,有什么办法只让他出来一个,再点就不再出现了.请教一下,THANKS!!!
...全文
862 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hanzhaorui 2007-03-12
  • 打赏
  • 举报
回复
分数太少,敬请谅解.
hanzhaorui 2007-03-12
  • 打赏
  • 举报
回复
多谢各位高手,问题解决方式正如lxcnn所说.
learlee 2007-03-12
  • 打赏
  • 举报
回复
请加上 Static 修饰 !
phommy 2007-03-10
  • 打赏
  • 举报
回复
另一个方法:好处是没有使用成员级的变量。

foreach (Form form in this.MdiChildren)
{
if (form is frmForm1)
{
form.Activate();
return;
}
}
//这里处理如果没有正在打开
linyanfu10 2007-03-10
  • 打赏
  • 举报
回复
当打开一个窗体以后让那个按钮不可以不就行了吗
关闭以后再让它恢复
Zine_Alone 2007-03-09
  • 打赏
  • 举报
回复
典型的单例模式
-过客- 2007-03-09
  • 打赏
  • 举报
回复
但是觉得
form1.BringToFront();
改为
form1.Active();
是不是好些:)
--------------------------
呵呵,应该是这样好些,只是随便加了行,看个人需要吧

又看了下,还有点小问题,应该是这样的

frmMDI1.frmForm1 form1 = null;

private void button1_Click(object sender, EventArgs e)
{
if (form1 == null || form1.IsDisposed)
{
form1 = new frmMDI1.frmForm1(this);
form1.Show();
}
else
{
form1.BringToFront();
}
}
北京的雾霾天 2007-03-09
  • 打赏
  • 举报
回复
lxcnn(过客) ( ) 信誉:100 Blog
正确!

但是觉得
form1.BringToFront();
改为
form1.Active();
是不是好些:)
-过客- 2007-03-09
  • 打赏
  • 举报
回复
楼主的意思是只允许一个form1的实例吧,Show()之前先判断一下就行了

if (form1== null || form1.IsDisposed)
{
frmMDI1.frmForm1 form1=new frmMDI1.frmForm1(this);
form1.Show();
}
else
{
form1.BringToFront();
}
hanzhaorui 2007-03-09
  • 打赏
  • 举报
回复
这不符合要求,如果真关了,那再打开就不行了,所以我想在建立窗体前最好判断窗体是否已打开,如果打开就不在SHOW,如果没打开就建一个且把他SHOW一下.代码我不会写,只是建议!!!



(哥们辛苦!!!)
myyihua 2007-03-09
  • 打赏
  • 举报
回复
frmForm1.Show();
frmForm1.WindowState = FormWindowState.Normal;
frmForm1.BringToFront();
frmForm1.Activate();
Fan52027 2007-03-09
  • 打赏
  • 举报
回复
还有一个办法就是把frmMDI1.frmForm1 form1=new frmMDI1.frmForm1(this);放在Click 事件外面,不要每次都实例化:

frmMDI1.frmForm1 form1=new frmMDI1.frmForm1(this);
private void menuItemAdd_Click(object sender, System.EventArgs e)
{
form1.Show();
}
hanzhaorui 2007-03-09
  • 打赏
  • 举报
回复
现在他还是点一次出现一个窗体,再点出现另外一个窗体.
hanzhaorui 2007-03-09
  • 打赏
  • 举报
回复
我试了,不行,就像VB中的form2.show一样,调多少次它就只显示第一次出现的窗口.
Fan52027 2007-03-09
  • 打赏
  • 举报
回复
form1.Hide();
form1.Show();这样就可以满足你说的要求吧.
hanzhaorui 2007-03-09
  • 打赏
  • 举报
回复
不好意思可能没说清楚,frmMDI1为父窗体,在它事件中调用显示子窗体frmForm1,我只想触发事件显示出子窗体frmForm1,当子窗体显示后再触发事件就不再出现第二个frmFrom1了.
(哥们辛苦,加了点分)
Fan52027 2007-03-09
  • 打赏
  • 举报
回复
写错了,
private void menuItemAdd_Click(object sender, System.EventArgs e)
{
frmMDI1.frmForm1 form1=new frmMDI1.frmForm1(this);
form1.Hide();
form1.ShowDialog();
}
hanzhaorui 2007-03-09
  • 打赏
  • 举报
回复
这样还是会点一次出现一个窗体.
Fan52027 2007-03-09
  • 打赏
  • 举报
回复
private void menuItemAdd_Click(object sender, System.EventArgs e)
{
frmMDI1.frmForm1 form1=new frmMDI1.frmForm1(this);
form1.Close();
form1.Show();
}

唉,就一分!
hanzhaorui 2007-03-09
  • 打赏
  • 举报
回复
给点提示吧高手们.

110,534

社区成员

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

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

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