我开始研究多种表单应用程序。我将在一个应用程序中有大约50个表单。问题是下一个:
我想在Form2
(我的意思是Form3
,Form4
,Form5
等)后的每个表单中都有一个按钮,它会再次显示Form2
并关闭当前的一个。以下是制作Form2
的代码:
Form2 form2 = new Form2();
form2.Tag = this;
form2.Show(this);
Hide();
还有代码可以从Form2
之后的任何表单返回Form2
:
private void button1_Click(object sender, EventArgs e)
{
var form2 = (Form2)Tag;
form2.Show();
this.Close();
}
当我运行该程序时,一切正常,除非我在Form2
之后点击任何表格中的按钮返回Form2
我收到以下错误:
InvalidCastException未处理
中
类型' System.InvalidCastException'的未处理异常发生在WindowsFormsApplication5.exe其他信息:无法转换类型为' WindowsFormsApplication5.Form3'的对象键入' WindowsFormsApplication5.Form2'。
答案 0 :(得分:0)
尝试替换它:
form2.Tag = this;
有了这个:
form2.Tag = form2;
答案 1 :(得分:0)
问题是你的Tag
属性可以保存对任何表单的引用,而不仅仅是Form2
,因此当你强制转换时,它会引发错误。
相反,将其强制转换为Form
基类:
var form = (Form)Tag;
form.Show();
this.Close();
然而,这听起来像是一种非常讨厌的方式来保持对“主”形式的引用。在这之前我会先看看你的架构。