winform中窗体的闪烁问题

twtyypmb123 2016-11-19 07:23:09
现在有form1和form2,在form1中有个button按钮,按钮的事件
Form f = new Form2();
f.Show();
this.Close();
在点击的时候form2始终会闪烁,不知道如何解决,找了很多方法,禁止背景重绘,双缓冲都没有用,求各路神仙支个招,或者说这种切换窗体的方式有问题?
...全文
306 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
twtyypmb123 2016-11-21
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
或者也可以反过来,form1 窗口组合了 form2控件,而不是什么 form2 窗口。 总之,窗口是最低级的概念(刚学编程的人只学会点这个)。而设计良好体验的组合式的(稍微)复杂界面,自然是要开发用户控件随时粘贴到窗口了,而不是从窗口来组合窗口的。
为什么要form2打开然后form1关掉,因为业务流程就是这样的,form1和form2是整个业务上的节点,如果由更好的方式体现节点、流程跳转,还望大神不吝赐教
twtyypmb123 2016-11-21
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
引用 4 楼 x3230835 的回复:
[quote=引用 1 楼 duanzi_peng 的回复:] 在form2中自定义一个事件,在loaded事件完成时触发。在form2 show之前触发该自定义事件,用于隐藏form1 而不是关闭。
可能是我没有描述完整,程序首先打开MainForm,MainForm一直开着的,Mainform上有个按钮打开form1,form1也有一个按钮打开form2,在show之后关闭form1,如代码所示,然后就会出现form2闪烁
你还是没有说明白“form2闪烁”具体是什么闪烁、闪烁几次? 如果打开一个窗口,它自然是要表现为“闪烁一次”的,不然怎么打开呢?你的设计就是走这个路子,那么各种生搬硬套的障眼法终究不是正路。如果你的局部内容本来应该是 form2 的一部分,那么你就应该设计到 form2 中,例如form2组合了一个叫做 from1的 用户控件,而不是什么 form1窗口。[/quote]首先闪烁是闪烁一次,闪烁的形式是首先显示form2的内容,因为show它了,然后突然显示form2所覆盖的图像(如果form2覆盖的是其他窗口,那么就显示其他窗口,如果是桌面,那么就显示桌面)存在时间大概0.5s,但肉眼可见,然后继续显示form2,我的代码没有特别的设计都很简单,知识加了背景图片和几个picturebox,大神闲的话可以试一下,现在基于楼上某位哥们的提示找到一个方法,就是form2再show之后不立马关闭form1,而是在form2的load结束后1s左右再关闭,方法是用的自定义事件,能显著缓解闪烁,但是也不能根治
  • 打赏
  • 举报
回复
或者也可以反过来,form1 窗口组合了 form2控件,而不是什么 form2 窗口。 总之,窗口是最低级的概念(刚学编程的人只学会点这个)。而设计良好体验的组合式的(稍微)复杂界面,自然是要开发用户控件随时粘贴到窗口了,而不是从窗口来组合窗口的。
  • 打赏
  • 举报
回复
引用 4 楼 x3230835 的回复:
引用 1 楼 duanzi_peng 的回复:
在form2中自定义一个事件,在loaded事件完成时触发。在form2 show之前触发该自定义事件,用于隐藏form1 而不是关闭。
可能是我没有描述完整,程序首先打开MainForm,MainForm一直开着的,Mainform上有个按钮打开form1,form1也有一个按钮打开form2,在show之后关闭form1,如代码所示,然后就会出现form2闪烁
你还是没有说明白“form2闪烁”具体是什么闪烁、闪烁几次? 如果打开一个窗口,它自然是要表现为“闪烁一次”的,不然怎么打开呢?你的设计就是走这个路子,那么各种生搬硬套的障眼法终究不是正路。如果你的局部内容本来应该是 form2 的一部分,那么你就应该设计到 form2 中,例如form2组合了一个叫做 from1的 用户控件,而不是什么 form1窗口。
泡泡龙 2016-11-19
  • 打赏
  • 举报
回复
也可能是别的原因吧,和form1估计没关系
twtyypmb123 2016-11-19
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
在form2中自定义一个事件,在loaded事件完成时触发。在form2 show之前触发该自定义事件,用于隐藏form1 而不是关闭。
可能是我没有描述完整,程序首先打开MainForm,MainForm一直开着的,Mainform上有个按钮打开form1,form1也有一个按钮打开form2,在show之后关闭form1,如代码所示,然后就会出现form2闪烁
twtyypmb123 2016-11-19
  • 打赏
  • 举报
回复
引用 2 楼 qq_17486399 的回复:
楼上+1,住窗体都关闭了,子窗体还怎么显示?
另外有个MainForm一直开着的
大鱼> 2016-11-19
  • 打赏
  • 举报
回复
楼上+1,住窗体都关闭了,子窗体还怎么显示?
exception92 2016-11-19
  • 打赏
  • 举报
回复
在form2中自定义一个事件,在loaded事件完成时触发。在form2 show之前触发该自定义事件,用于隐藏form1 而不是关闭。

110,533

社区成员

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

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

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