c#一个关于窗体切换的问题

Jason-Jin 2010-02-02 02:41:09
前提:我开发的一个winfrom程序(不是MDI),有窗体A,窗体B

需求:在点击窗体A上的按钮时,窗体A隐藏,进入窗体B,在窗体B退出时,窗体A显示。

问题:(1)如果使用 this.hide()虽然可以隐藏A窗体,进入B窗体,但如何在显示A呢,如果新实例化A窗体在SHOW的话,那样会产生同时存在两个A窗体的问题(一个是以前被隐藏的显示了,另外一个是新实例化show出来的),所以这个办法不行

(2)不能使用this.close()方法,因为在窗体中chosing事件已经使用。

看看大家还有什么好办法没
...全文
264 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuffies 2010-02-11
  • 打赏
  • 举报
回复
关注中,我也被这个困扰。。
heng1986325 2010-02-04
  • 打赏
  • 举报
回复
你可以定义一个类,专门用来放置公共变量,在这个类中定义A窗体和B窗体,但不要初始化B,单击A窗体按钮时,初始化B窗体,隐藏A。
Jason-Jin 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jaydawson 的回复:]
引用 9 楼 jjx0224 的回复:
引用 7 楼 ocean202715 的回复:
Form1.Visible = false;
Form2 f = new Form2();
if(f.ShowDialog() == DialogResult.OK)
{
Form1.Visible = true;
}


这样可以隐藏a窗体,那窗体B对话框的返回值在哪获得,那边又怎么接收


1. 如果你的B form所做的值改变不需返回至A中使用,上面的代码就可以实现功能。
2. 如果B form 所做的值改变需要返回至A中使用,建议使用类传递或者全局变量.

当然以上写法的前提:你要把Form B的DialogResult属性进行设置。

[/Quote]
恩,就是因为这个问题,,
jaydawson 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jjx0224 的回复:]
引用 7 楼 ocean202715 的回复:
Form1.Visible = false;
Form2 f = new Form2();
if(f.ShowDialog() == DialogResult.OK)
{
Form1.Visible = true;
}


这样可以隐藏a窗体,那窗体B对话框的返回值在哪获得,那边又怎么接收
[/Quote]

1. 如果你的B form所做的值改变不需返回至A中使用,上面的代码就可以实现功能。
2. 如果B form 所做的值改变需要返回至A中使用,建议使用类传递或者全局变量.

当然以上写法的前提:你要把Form B的DialogResult属性进行设置。
MicroSoftor 2010-02-02
  • 打赏
  • 举报
回复
返回值已经获得
if(f.ShowDialog() == DialogResult.OK)
Jason-Jin 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ocean202715 的回复:]
Form1.Visible = false;
Form2 f = new Form2();
if(f.ShowDialog() == DialogResult.OK)
{
Form1.Visible = true;
}

[/Quote]
这样可以隐藏a窗体,那窗体B对话框的返回值在哪获得,那边又怎么接收
Jason-Jin 2010-02-02
  • 打赏
  • 举报
回复
你们说的方法都不行,如果Form1.Visible = false;多开的话它还是占用系统资源,我这开发的是给予wince的程序,本来PDA内存就小,

而且都没看清我问的,我在关闭B窗体的时候A如何才能显示呢,如果用show那么以前隐藏的也会出现,这时就又两个A窗体了
ocean202715 2010-02-02
  • 打赏
  • 举报
回复
Form1.Visible = false;
Form2 f = new Form2();
if(f.ShowDialog() == DialogResult.OK)
{
Form1.Visible = true;
}
zgke 2010-02-02
  • 打赏
  • 举报
回复
Application.OpenForms["窗体名"]
xu56180825 2010-02-02
  • 打赏
  • 举报
回复
方法多了,这对于只有两个FORM是比较方便的,也可以用集合阿~委托啊。。。
dc212009 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xu56180825 的回复:]
在B的构造函数中把A当参数传递给B,然后在B退出的时候调用A.SHOW()

[/Quote]
只知道这种方法,呵呵。
xu56180825 2010-02-02
  • 打赏
  • 举报
回复
在B的构造函数中把A当参数传递给B,然后在B退出的时候调用A.SHOW()
ztenv 2010-02-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jackleimm 的回复:]
C# codethis.Visible=false;
Form2 f=new Form2();
f.ShowDialog();
[/Quote]
再加上:
this.visible=true;

就可以解决你的问题了
JackLeiMM 2010-02-02
  • 打赏
  • 举报
回复

this.Visible = false;
Form2 f = new Form2();
f.ShowDialog();

110,545

社区成员

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

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

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