今天,我使用了很多这些功能,但我已经发现了一些关于它们的问题。 我的程序结构如下:
这是表单1 :
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
...
...
edit = new Button();
edit.Click += new EventHandler((s, e) => edit_mode(s, e,x,y,c,z)); //x, y, c, z are some variables that I need to pass to purposes of this software.
this.Controls.Add(edit);
}
void edit_mode(object sender, EventArgs e, string x,string y, int c, int z)
{
...
...
Form edits = new Form4();
edits.Show();
this.Hide();
}
}
这是表格4 :
public partial class Form4 : Form
{
public Form4()
{
InitializeComponent();
...
...
...
Form backs= new Form1();
backs.Show();
this.Close();
}
这篇文章的目标如下:当我进入" edit_mode"函数,Form1必须消失才能显示一个新的Form(Form4)。
我'我在这里搜索了很多,但没有解决方案对我有用:编译器没有报告错误,所以当我调试这段代码时,一切似乎都有效;但是当它到达edits.Show(); (在Form1中)它说:ObjectDisposedException错误,我不明白为什么。 我试图用this.Hide()替换this.Close()并且程序运行良好,直到执行Form4的this.Hide()函数: 实际上,当Form4出现并执行其代码时,它会自动停止到this.hide()并且form4不会消失(同时显示为Form1)。 我还尝试在form4中创建一个Button,并在此处移动代码以打开Form1 ..它的效果很好!但我只是一个问题:我不希望用户按下按钮使其正常工作。 所以我需要自动制作这个"表格改变"。
对这个问题有任何想法吗?
答案 0 :(得分:2)
不确定你在Form4的构造函数中放置的....点中想要实现的是什么,但是可以肯定的是,在构造函数的末尾调用Close会炸掉edits.Show
之后调用的Form edits = new Form4();
{1}}
实际上,在那一点上,edits
变量指向一个不再可用(处置)的Form4实例。
您可以尝试使用这些更改修复代码
void edit_mode(object sender, EventArgs e, string x,string y, int c, int z)
{
...
...
this.Hide();
Form edits = new Form4();
edits.ShowDialog();
this.Show();
}
public partial class Form4 : Form
{
public Form4()
{
InitializeComponent();
this.Shown += Form4_Shown;
// These lines doesn't make sense because you are creating a
// different instance of Form1. This instance (named backs) is
// not the same instance that creates the Form4
// Form backs= new Form1();
// backs.Show();
// Moved to the Form4_Shown event handler
// this.Close();
}
public void Form4_Shown(object sender, EventArgs e)
{
// Move here the code that was previously in the constructor
....
....
this.Close();
}
此方法将您用Form4的构造函数中的点替换的代码移动到Shown事件。显示表单并初始化所有控件时将触发此事件。此时您可以决定关闭实例。
令人费解的是,为什么你需要显示一个表格然后立即关闭它。如果您不需要与用户进行任何交互,您可以选择在类中移动虚线代码,而不要尝试显示Form4。