如何在第二次打开表格';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(); 
} 

我已经尝试了以上所有的编码,但无法得到我所期望的。。你们能发现吗;帮帮我,我在这儿缺了什么。。

如何在第二次打开表格';s关闭&;它不应该在已打开时再次打开

Application.OpenForms集合不可靠。当您更改窗体的某些属性(如ShowInTaskbar属性)时,窗体实例将从该集合中消失,而不会被跟踪。这是Winforms中一个众所周知的错误,这可能是您无法进行原始尝试的原因。

可靠的替代方案是自己跟踪表单实例的生命。像这样:

    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是解决方案的关键部分。