我使用c#.net 2.0和oracle 10g
进行窗口应用我有一个表格名称FORM1 with menustrip
从FORM1的menustrip,我打开另一个表格FORM2并在使用后关闭相同的FORM2 但如果我第二次点击它就没有显示
我还添加了一些代码,如果用户在关闭相同的FORM2之前第二次按下相同的menustrip按钮,则不应打开并将已打开的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;
}
使用此代码,当用户多次点击menustrip时,我可以多次打开相同的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();
}
我已经尝试了以上所有编码,但我无法得到我所期待的......你能不能找到&帮助我,我在这里失踪了..
答案 0 :(得分:2)
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是解决方案的关键部分。