如何在第二次打开表格';s关闭&;它不应该在已打开时再次打开
本文关键字:不应该 amp 关闭 表格 第二次 | 更新日期: 2023-09-27 18:21:11
i使用c#.net 2.0和oracle10g 执行窗口应用程序
我有一个带有菜单条的表单名称FORM1
从FORM1的菜单条中,我打开另一个FORM2表格,并在使用后关闭同一个form但如果我第二次点击它,它就不会显示
我还添加了一个代码,如果用户在关闭相同的FORM2之前第二次按下相同的菜单条按钮,它就不应该打开,并将已经打开的FORM2带到的焦点
编辑::
第一次尝试------------------
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
FORM2 f2 = Application.OpenForms["FORM2"] as FORM2 ;
if (f2 != null)
{
f2 .WindowState = FormWindowState.Normal;
f2 .BringToFront();
f2 .Activate();
}
else
{
f2 = new FORM2();
f2.Show();
}
}
第二次尝试--------------
private void FORM2_FormClosing(object sender, FormClosingEventArgs e)
{
this.Hide();
e.Cancel = true;
}
有了这个代码,当用户多次点击菜单条时,我可以多次打开同一个FORM2。。我不希望这种情况发生
第三次尝试--------------
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
FORM f2 = new FORM2();
f2.Show();
}
该代码也与第二次尝试相同
第四次尝试--------------
private FORM2 f2 = null;
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
if (f2 == null)
{
f2 = new FORM2();
}
f2.Show();
f2.Activate();
}
我已经尝试了以上所有的编码,但无法得到我所期望的。。你们能发现吗;帮帮我,我在这儿缺了什么。。
可靠的替代方案是自己跟踪表单实例的生命。像这样:
private Form Form2Instance;
private void openToolStripMenuItem_Click(object sender, EventArgs e) {
if (Form2Instance == null) {
Form2Instance = new FORM2();
Form2Instance.FormClosed += (s, ea) => Form2Instance = null;
}
Form2Instance.WindowState = FormWindowState.Normal;
Form2Instance.Show();
Form2Instance.BringToFront();
}
监听FormClosed事件并将引用设置为null是解决方案的关键部分。