隐藏ShowDialog窗口的一些困惑

pig4210 2009-11-27 11:37:46
使用ShowDialog建立模态对话框后,使用Visible=false或this->Hide()隐藏窗口,都将触发Closing事件。并且ShowDialog以DialogResult::Cancle返回。这时,想要再显示对话框,还得再次ShowDialog(不能Show或Visible=true)。再次触发Load事件与Shown事件。
由于我在load中做初始化事件,只想做一次,而不想再次显示对话框时再做一次初始化。
有没有牛人讲解一下如何巧妙地隐藏ShowDialog出来的对话框。
...全文
732 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
msdn000 2021-06-22
  • 打赏
  • 举报
回复

模态窗口就不要在load做初始化,在构造函数里面做。

pig4210 2009-12-08
  • 打赏
  • 举报
回复
这么久了,还是没有更好的解决方案,最后采用做全局变量判断窗口的关闭是由hide引起还是真实意愿的关闭。如果是由hide引起,则在适当时候再次ShowDialog。结帖,谢谢大家。
cnzdgs 2009-11-29
  • 打赏
  • 举报
回复
不知道你的困难在哪,不过既然是混合编程,可以直接用API ShowWindow控制窗口的显示和隐藏,再用EnableWindow控制窗口的禁用和启用。
無葉 2009-11-28
  • 打赏
  • 举报
回复
关注 …………
pig4210 2009-11-28
  • 打赏
  • 举报
回复
建立的是Win32工程,后加入CLR,使用线程开启CLR窗口。一边是标准C++,一边是托管代码。
参考:http://topic.csdn.net/u/20090910/11/c97bd506-d0e7-4b93-8929-7a285f35c9a3.html
ProgrammerNO1 2009-11-28
  • 打赏
  • 举报
回复
何为”混合编程“
pig4210 2009-11-28
  • 打赏
  • 举报
回复
我写的混合编程,只能用ShowDialog啊。。。看来是没有办法解决了,只能在构造函数里初始。
再等等,听听大家意见
悔说话的哑巴 2009-11-28
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cnzdgs 的回复:]
所谓模态对话框,就是只能对该对话框进行操作,其它窗口都被禁用,只有该对话框关闭后才能操作其它窗口。如果你需要隐藏和显示,就不要用ShowDialog了,改成用Show。可以自己禁用其它窗口。
[/Quote]
UP
cnzdgs 2009-11-28
  • 打赏
  • 举报
回复
所谓模态对话框,就是只能对该对话框进行操作,其它窗口都被禁用,只有该对话框关闭后才能操作其它窗口。如果你需要隐藏和显示,就不要用ShowDialog了,改成用Show。可以自己禁用其它窗口。
宝_爸 2009-11-27
  • 打赏
  • 举报
回复
想这样

Form2 form2 = new Form2();

private void button1_Click(object sender, EventArgs e)
{
form2.ShowDialog();
}

可以在Form2的构造函数中初始化数据。

我觉得ShowDialog出来的窗口是模态对话框,因此必须要被destroy掉后,主窗口才能得到焦点
goldenbull9 2009-11-27
  • 打赏
  • 举报
回复
模态对话框的特点就是“无法隐藏,隐藏即关闭”,你偏要和这个设计原则对着干,呵呵
你的需求应该用非模态对话框,即Show()方法
宝_爸 2009-11-27
  • 打赏
  • 举报
回复
在构造函数中载入数据呢?
Mirana_NightShade 2009-11-27
  • 打赏
  • 举报
回复
帮顶下
pig4210 2009-11-27
  • 打赏
  • 举报
回复
这我想过,只是我想了解一下大家还有没有更好的解决办法。谢谢
yangsh3002 2009-11-27
  • 打赏
  • 举报
回复
使用一个bool型成员变量或者静态变量,初始化之前检查,初始化之后改变

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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