新建一个WinForm工程(此时有了窗体Form1),给工程增加一个窗体Form2.
在Form1上加一个按钮,Click代码如下:
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
}
当我点form1.button1按钮的时候,可以Show出form2, 可是当我多次点击button1,会弹出多个form2窗体,可是我只想弹出一个form2窗体(也就是说如果form2窗体不存在则创建并show出,如果已经存在,则仅仅只是把它show出来)!!!请问怎么写???(注:
我尝试把代码改成如下那样。
Form2 form2;
private void button1_Click(object sender, EventArgs e)
{
if (form2 == null)
form2 = new Form2();
form2.Show();
}
当我第一次点button1的时候,可是show出form2, 然后我关掉form2, 再去点form1.button1,报错: 无法访问已释放的对象!
)
在Form1上加一个按钮,Click代码如下:
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
}
当我点form1.button1按钮的时候,可以Show出form2, 可是当我多次点击button1,会弹出多个form2窗体,可是我只想弹出一个form2窗体(也就是说如果form2窗体不存在则创建并show出,如果已经存在,则仅仅只是把它show出来)!!!请问怎么写???(注:
我尝试把代码改成如下那样。
Form2 form2;
private void button1_Click(object sender, EventArgs e)
{
if (form2 == null)
form2 = new Form2();
form2.Show();
}
当我第一次点button1的时候,可是show出form2, 然后我关掉form2, 再去点form1.button1,报错: 无法访问已释放的对象!
)
{
Form2 form2 = new Form2();
form2.ShowDialog();
}
{
form2 = new Form2();
form2.Show();
}
{
foreach(Form fin this.OwnedForm)
{
if(f==frm)
{
retrun true;
}
}
retrun false;
}
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
this.Hide();
e.Cancel = true;
}
1楼 没明白具体要求是什么,你说的那个是模态的,要求应该是非模态的,他说了还可以再打开form2的。
隐藏不是解决问题的办法,不过可以实现要求,看起来效果是一样的。
3楼 这段程序好像有点逻辑错误。 form2 = new Form2(); 这句话是赋值吧,没有赋值怎么就能判断。
4楼 这个思想应该是对的。个人想法,和大家交流下。
Form2 form2;
Form2 form2;
private void button1_Click(object sender, EventArgs e)
{
if (form2 == null)
{
form2 = new Form2();
form2.FormClosed += new FormClosedEventHandler(form2_FormClosed);
}
form2.Show();
} void form2_FormClosed(object sender, FormClosedEventArgs e)
{
form2 = null;
}
ShowDialog()是可以的,不过我不喜欢,因为它会把show出来的窗体放到最上层,
而且好像还不能调···········
private void OpenForm_Click(object sender, EventArgs e)
{
Form f = Application.OpenForms["Form2"]; //查找是否打开过Form1窗体
if (f == null) //没打开过
{
Form2 fa = new Form2();
fa.Show(); //重新new一个Show出来
}
else
{
f.Focus(); //打开过就让其获得焦点
}
}
private void button2_Click(object sender, EventArgs e)
{
if(frm==null || frm.Visible == false)
frm = new Form19();
frm.Show(); }
if (form2 == null)
{
form2 = new Form2();
form2.Show();
form2.Activate();
}
else if (form2.CanFocus)
{
form2.Activate();
}
else
{
form2 = new Form2();
form2.Show();
form2.Activate();
}
Form2 form2;
private void button1_Click(object sender, EventArgs e)
{
if (form2 == null || !form2.Created)
form2 = new Form2();
form2.Show();
}