WinForm 父窗体隐藏到后台的问题

daxinghuangdi 2010-09-28 05:57:24
程序是这样的:
父窗体即主界面 子窗体为进度条
在父窗体定义一个线程指向“显示子窗体”的函数(该函数在子窗体中)
对硬件操作的耗时程序写在了子窗体里,操作完成后
将标识变量传递给父窗体,以便在父窗体中关闭线程

现在存在的问题是:
显示子窗体的线程开始后,主线程休眠0.5秒,在这0.5秒中父窗体还在前台
之后就看到父窗体标题头变灰
等子窗体自动关闭后弹出一个messagebox
点击确定关闭messagebox,父窗体就不见了
将所有打开的程序最小化 父窗体就躲在最后面
(整个过程父窗体还是在任务栏上能看到)

如何解决,求告解!
...全文
279 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
daxinghuangdi 2010-09-29
  • 打赏
  • 举报
回复
你说的方法我试过,问题依旧

进度条在显示时,主窗体不能隐藏,只是失去焦点
进度条自动关闭后,焦点重新回到主窗体上


swalp 2010-09-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 daxinghuangdi 的回复:]
谢谢帮顶

显示子窗体时是ShowDialog
父窗体并没有隐藏或关闭
[/Quote]
如果是用的ShowDialog的话,主窗体还是存在的,不能隐藏
frm.Show()
This.Hide()
这样的话主窗体是可以隐藏的,
当你的进度条结束后,在用FORM1.show再显示出来就可以了。
daxinghuangdi 2010-09-29
  • 打赏
  • 举报
回复
仔细分析了一下,是关闭MessageBox后主窗体失去焦点
但点击进度条上的“取消”,强制中断扫描,也会弹出MessageBox,这时关闭MessageBox却是正常的
龍月 2010-09-29
  • 打赏
  • 举报
回复
ShowDialog 不要用 ,用show 子窗体属性 topmost =true
然后就是 弹出 子窗体用 异步线程
用控件 backgroundworker
yoyo_fan_503 2010-09-29
  • 打赏
  • 举报
回复
看不明白 帮顶
daxinghuangdi 2010-09-29
  • 打赏
  • 举报
回复
谢谢帮顶

显示子窗体时是ShowDialog
父窗体并没有隐藏或关闭
swalp 2010-09-29
  • 打赏
  • 举报
回复
帮你顶,顺便问一下,你用的主窗体.hide?
daxinghuangdi 2010-09-29
  • 打赏
  • 举报
回复
。。。问题先留着
结贴了
swalp 2010-09-29
  • 打赏
  • 举报
回复
如果是用的ShowDialog的话,主窗体还是存在的,不能隐藏
daxinghuangdi 2010-09-28
  • 打赏
  • 举报
回复
忙晕了,把问题搞错了
进度条不做什么事,只是用来告诉用户程序正在运行
耗时的程序在父窗体执行
进度条窗体的标识变量用于用户点击进度条上的“取消”按钮时,传回参数,中断硬件操作并关闭线程

其他问题就像前面说的一样
我对线程不怎么了解,之前只求达到效果,问题拖到现在必须解决了,不然老大会扁我。。。
chenger19890917 2010-09-28
  • 打赏
  • 举报
回复
百度一下
kj289907795 2010-09-28
  • 打赏
  • 举报
回复
帮你顶下 !!

110,534

社区成员

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

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

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