我的应用中有2个表单,Form1
和Form2
。我想知道是否有
检查表单是否已加载的更好方法。如果表格是
加载到内存中并且可见,如果User
,我希望按钮不执行任何操作
已经关闭了它应该重新实例化的形式。
有关详情,请查看我的代码或评论.. :))
public partial class Form1: Form
{
private Form2 form2;
public Form1() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
if (form2== null) {
form2= new Form2();
} else {
if (form2.has_exited()) { // this is a private property
// that I set when Form2.Closing executes
form2.Dispose();
form2= new Form2();
}
}
form2.Show();
}
}
答案 0 :(得分:5)
您无需让Form2
处理结束事件,您可以直接从Form1
执行此操作:
private Form2 form2;
private void button1_Click(object sender, EventArgs e)
{
if (form2 == null)
{
form2 = new Form2();
form2.FormClosed += (_, arg) =>
{
form2 = null;
};
form2.Show();
}
else
{
//the other form has been opened and not closed; not sure what you want to do
}
}
另请注意,如果通过Show
显示表单,则无需处理该表单。如果你通过ShowDialog
显示,那么你可以这样做,但是当你使用非模态对话框时,系统会自动将事件处理程序附加到调用dispose的结束事件。
答案 1 :(得分:2)
我用
if (form2 == null)
{
form2 = new Form2();
form2.FormClosed += (s, e) => { this.form2 = null; };
form2.Show();
}
form2.BringToFront()
因此,每次关闭form2
时,引用都会设置为null
。下次可以重新实例化。
只要它仍然存在,就把它带到前面。
答案 2 :(得分:0)
您可以将Form1传递给Form2,并且在.Loaded或在Form2中处置/退出等事件中,您可以使用Form1对象让它知道这些事件已经发生。
答案 3 :(得分:0)
如果您要显示表单,表单将抛出一个名为Form.Shown
的事件http://msdn.microsoft.com/en-us/library/system.windows.forms.form.shown.aspx
你可以在那里放置某种处理代码(即使它只是设置一个标志)。类似地,如果用户关闭它,则表单关闭/关闭事件。
我认为这也是一个有形式的事件,但我不记得我的头脑。