在C#中的多个表单之间导航

时间:2011-08-10 16:02:48

标签: c# winforms forms navigation

我有两种形式,其中一种有一个冲击波组件添加到它,它播放一个flash电影,点击一个按钮创建一个按钮形式1(frmFlashIntro)卸载和形式2(frmMain)启动。 因为frmFlashIntro是一个只用一次我想卸载表单而不是隐藏它的表单。我还希望frmMain在frmFlashIntro关闭时完全控制,就好像它是主要形式一样。 隐藏表单似乎不是一个很好的方法来做这件事。

我目前正在做的是我在frmFlashIntro中创建了一个属性,并为它们添加了get和set方法(两者都是blanK)

public Form FormfrmMainRef { get; set; }

我将此代码添加到点击事件中。

frmMain fm = new frmMain();
this.FormfrmMainRef = fm;
FormfrmMainRef.Show();

现在这有效地显示了我的frmMain,但保持frmFlashIntro也在运行,所以我做了这个

frmFlashIntro fi=new frmFlashIntro();
fi.Close();//checked with dispose also

我知道我在最后一步做错了什么。任何人都可以告诉我如何关闭该表格并释放其所拥有的资源。

我也不想使用MDI

2 个答案:

答案 0 :(得分:1)

看起来frmMain没有引用原始的frmFlashIntro。你的代码

frmFlashIntro fi=new frmFlashIntro();
fi.Close();//checked with dispose also

实际上会创建第二个frmFlashIntro,所以当你调用fi.Close()时,你实际上是在关闭第二个表单而不是原始表单。

理论上你应该能够在你的frmMain中添加一个属性,它是对frmFlashIntro的引用,然后在那上面调用Dispose,这样就像

frmMain fm = new frmMain(); this.FormfrmMainRef = fm; fm.FormIntroRef = this; FormfrmMainRef.Show();

然后在frmMain的load事件中,添加对FormIntroRef.close()的调用

好的,但是,除此之外,我认为解决此问题的最佳方法是更新Program.cs文件,然后使用

frmFlashIntro flashIntro = new frmFlashIntro
frmFlashIntro.ShowDialog();
frmMain mainForm = new frmMain()
Application.Run(frmMain);

哦,第二个侧面注释,通常,类型以大写字母开头,这些类型的实例以小写字母开头,并且是驼峰式的。所以你通常会有像

这样的东西
MainForm frmMain = new MainForm()

那应该达到你想要的结果。

答案 1 :(得分:0)

您是否尝试使用fi.Dispose()处理表单?