2:问一个关于Form创建的小问题,在线等待,很快给分。

Vicar2 2009-06-10 07:47:19
新建一个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,报错: 无法访问已释放的对象!
)
...全文
69 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
river_a 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 snailiest 的回复:]
这些回答是不能解决问题的。
1楼 没明白具体要求是什么,你说的那个是模态的,要求应该是非模态的,他说了还可以再打开form2的。
隐藏不是解决问题的办法,不过可以实现要求,看起来效果是一样的。
3楼 这段程序好像有点逻辑错误。 form2 = new Form2(); 这句话是赋值吧,没有赋值怎么就能判断。
4楼 这个思想应该是对的。

个人想法,和大家交流下。
[/Quote]
糊涂官判断糊涂案,以己昏昏岂能使人昭昭?
不知道你胡言乱语想说些什么?
phommy 2009-06-11
  • 打赏
  • 举报
回复
你的代码改一处就可以


Form2 form2;
private void button1_Click(object sender, EventArgs e)
{
if (form2 == null || !form2.Created)
form2 = new Form2();
form2.Show();
}
Profiteerchen 2009-06-11
  • 打赏
  • 举报
回复
如果楼主坚持用Show而不用ShowDialog的话,看看下面的


if (form2 == null)
{
form2 = new Form2();
form2.Show();
form2.Activate();
}
else if (form2.CanFocus)
{
form2.Activate();
}
else
{
form2 = new Form2();
form2.Show();
form2.Activate();
}
MOmo400 2009-06-11
  • 打赏
  • 举报
回复
用不着那么麻烦,这样就行了



Form19 frm;


private void button2_Click(object sender, EventArgs e)
{
if(frm==null || frm.Visible == false)
frm = new Form19();
frm.Show();

}
wxm3630478 2009-06-11
  • 打赏
  • 举报
回复

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(); //打开过就让其获得焦点
}
}

snailiest 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 river_a 的回复:]

糊涂官判断糊涂案,以己昏昏岂…
[/Quote]

菜鸟发表下自己的看法呀,看见问题总不能就说顶一下就完事了,总得要思考下。

顺便说下,你的代码的确能解决问题,现在看明白了。
gwf25sz 2009-06-11
  • 打赏
  • 举报
回复
随便加个bool 值就可以判断了,判断按钮是否点击过你甚至可以把按钮变成不可用。
ShowDialog()是可以的,不过我不喜欢,因为它会把show出来的窗体放到最上层,
而且好像还不能调···········
coconutyf 2009-06-11
  • 打赏
  • 举报
回复

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;
}
snailiest 2009-06-10
  • 打赏
  • 举报
回复
8楼 这个能实现的,
有没有不隐藏就能实现贴主要求的。
snailiest 2009-06-10
  • 打赏
  • 举报
回复
这些回答是不能解决问题的。
1楼 没明白具体要求是什么,你说的那个是模态的,要求应该是非模态的,他说了还可以再打开form2的。
隐藏不是解决问题的办法,不过可以实现要求,看起来效果是一样的。
3楼 这段程序好像有点逻辑错误。 form2 = new Form2(); 这句话是赋值吧,没有赋值怎么就能判断。
4楼 这个思想应该是对的。

个人想法,和大家交流下。
cnzdgs 2009-06-10
  • 打赏
  • 举报
回复
在Form2中响应FormClosing事件:
private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
this.Hide();
e.Cancel = true;
}
sjfujiang 2009-06-10
  • 打赏
  • 举报
回复
3楼的好像可以!
修改一下昵称 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 river_a 的回复:]
if (form2 == null || form2.IsDisposed)
{
form2 = new Form2();
form2.Show();
}
[/Quote]
像这样,你判断一下应该就OK了
WuZongBo 2009-06-10
  • 打赏
  • 举报
回复
Show的时候用new Form2().Show(this);
WuZongBo 2009-06-10
  • 打赏
  • 举报
回复


bool checkFrm(Form frm)
{
foreach(Form fin this.OwnedForm)
{
if(f==frm)
{
retrun true;
}
}
retrun false;
}
river_a 2009-06-10
  • 打赏
  • 举报
回复
if (form2 == null || form2.IsDisposed)
{
form2 = new Form2();
form2.Show();
}
saytesnake 2009-06-10
  • 打赏
  • 举报
回复
把Form1隐藏起来不得了?
ljhcy99 2009-06-10
  • 打赏
  • 举报
回复
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.ShowDialog();
}

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧