无法将“WindowsFormsApplication5.Form3”类型的对象强制转换为“WindowsFormsApplication5.Form2”

时间:2014-12-01 09:25:12

标签: c# winforms

我开始研究多种表单应用程序。我将在一个应用程序中有大约50个表单。问题是下一个: 我想在Form2(我的意思是Form3Form4Form5等)后的每个表单中都有一个按钮,它会再次显示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'。

2 个答案:

答案 0 :(得分:0)

尝试替换它:

  

form2.Tag = this;

有了这个:

  

form2.Tag = form2;

答案 1 :(得分:0)

问题是你的Tag属性可以保存对任何表单的引用,而不仅仅是Form2,因此当你强制转换时,它会引发错误。

相反,将其强制转换为Form基类:

var form = (Form)Tag;
form.Show();
this.Close();

然而,这听起来像是一种非常讨厌的方式来保持对“主”形式的引用。在这之前我会先看看你的架构。