C#中多个窗体之间的交互操作问题

Conia_HE 2007-03-22 06:06:32
窗体之间的关系
主窗体M
点击M上按钮显示窗体A(模式),点击A中按钮显示窗体B,点击B中按钮显示窗体C,点击C中按钮显示窗体D……
A<-->B<-->C<-->D<-->E……
B,C,D 窗体上均两个按钮 "返回""下一步" 简单来说就是类似于安装软件是的各个界面。
从B返回A窗体时,A窗体中原信息依然存在。
同一时间,ABCDE只显示一个,其他掩藏。
实现如上功能,有什么办法是最好的,给点思路就行,给出几个主要的函数。
-------
我用handle 做的时候
A窗体点击"下一步"时
this.visible = false;
FormB form = new FormB(IntPtr 窗口A句柄);
form.ShowDialog();
B窗体点击"上一步"时
this.Visible = false;
FormA form = Form.FromHandle(窗口A句柄);
form.ShowDialog();
-------
上面方法作的时候,次数多了就出错。
然后一个问题A掩藏 B显示的时候,主窗体M 却最小化了。

请高手给个解决的方法,(不一定用句柄) 谢谢啦


...全文
789 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
syy110112 2010-03-20
  • 打赏
  • 举报
回复
额,学习了找好要用
Conia_HE 2007-03-27
  • 打赏
  • 举报
回复
窗体的显示不是连续的,B窗体完了不一定显示C窗体,根据B窗体上的某些控件例如checkbox之类的来决定下个窗体显示C或D,或都不显示,直接去E窗体
leixueqiyi 2007-03-23
  • 打赏
  • 举报
回复
把窗体封装成静态的
Form[] g_myForms = new Form[]{
new Form1(),new Form2(),new Form3()
}
int g_nFormIndex = 0;

2 下一步时,myForms[g_nFormIndex].Hide(), g_nFormIndex++, myForms[g_nFormIndex].show()

3 如果点上一步,就myForms[g_nFormIndex].Hide(), g_nFormIndex--, myForms[g_nFormIndex].show()

这个控制我是放在一个主窗口中控制的
Conia_HE 2007-03-23
  • 打赏
  • 举报
回复
窗体是必须存在的,每个窗体都很复杂,有其相应的功能,而且将窗体改成控件,不是我可以操作的。
还有不是做安装界面。实际功能类似于“新建一个工程”一样,有一步一步的选择操作。


FindingMySelf 2007-03-22
  • 打赏
  • 举报
回复
帮顶
greenery 2007-03-22
  • 打赏
  • 举报
回复
用panel加控件也是一个很好的解决方法哦。
或许MDI窗口模式也不错。
seekfocus 2007-03-22
  • 打赏
  • 举报
回复
既然用了面向对象来编写这个Windows程序
为何不用对象来编写
solsolsol 2007-03-22
  • 打赏
  • 举报
回复
另一种设计考虑是,不要用那么多窗体,用用户控件就好,只需要一个主窗体,切换时,真正切换的是你的用户控件,方便多了,逻辑可以很好的分开

这个挺好的,我常用到这个,比如写几个panel的类,在主窗体按需求显示
superbug1984 2007-03-22
  • 打赏
  • 举报
回复
其实ls把原理说的差不多了

lz要是懂了ApplicationContext的含义的话,这个东西就非常easy了,在设计模式中也有一个东西lz可以用用,lz的做法可以说非常容易出错,非常不OO,变动性太差

我的想法是用一个链表之类的东西,将各个窗体对象存储其中,然后要有一个宿主管理这个链表,当窗体进行切换时,只需要在这个链表中进行切换就好了,还有是在ShowDialog()时,用异步的形式,这样就不需要用Visible这样的东西达到掩藏窗体的目的,而且窗体也真正的被销毁了,你那种Visible更改只是掩人耳目而已。

另一种设计考虑是,不要用那么多窗体,用用户控件就好,只需要一个主窗体,切换时,真正切换的是你的用户控件,方便多了,逻辑可以很好的分开

greenery 2007-03-22
  • 打赏
  • 举报
回复
1 建立全局变量(可以是静态的)
Form[] g_myForms = new Form[]{
new Form1(),new Form2(),new Form3()
}
int g_nFormIndex = 0;

2 下一步时,myForms[g_nFormIndex].Hide(), g_nFormIndex++, myForms[g_nFormIndex].show()

3 如果点上一步,就myForms[g_nFormIndex].Hide(), g_nFormIndex--, myForms[g_nFormIndex].show()

这个控制我是放在一个主窗口中控制的
WangXy_soft 2007-03-22
  • 打赏
  • 举报
回复
如果做安装软件的界面,用tabcontrol就可以。

111,125

社区成员

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

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

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