winform 窗口加载时闪动问题

ngnono 2008-06-28 12:25:38
如题,我做了一个c# winform的小程序,需要几个窗口来回显示,并且要全屏.
全屏代码
if (this.FormBorderStyle == FormBorderStyle.None)
{
this.FormBorderStyle = FormBorderStyle.FixedSingle;
this.WindowState = FormWindowState.Normal;
}
else
{
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
}
这段代码我放到了 form LOAD里面.
因为在每个窗口之间又需要返回上一级,或返回最顶级.(分了三级)
返回上一级窗口 this.Close() 就可以了.
返回最顶级
第一种
FormCollection fc = System.Windows.Forms.Application.OpenForms;
fc["第二级名称"].Close();
this.Close(); //第三级 当前窗口关闭
第二种
try
{
FormCollection fc = System.Windows.Forms.Application.OpenForms;

for (int i = 0; i < fc.Count; i++)
{
if (fc[i].Name != "Main") //Main是我最顶级窗口
{
fc[i].Close();
}

}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

但是在加载窗口(可能也在关闭其它窗口时候)屏幕非常快的闪.这样效果很差.
我怀疑有几种可能
1.窗体加载呈现出来的时候闪一下,然后在load事件时候执行全屏代码,闪一下.这样,一个加载窗口就闪动了两次.
2.窗口在加载的时候,我会关闭其它窗口,这样也就造成了闪烁..
现在我想解决的问题,就是如何不让屏幕闪,太影响效果了...不知道如何做.思路没有了.
也想问下,winform是否有webform一样的窗口加载过渡效果..这样,我就可以用另一种方式,来遮盖闪这个问题.
请指点.谢!
...全文
561 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
mextb1860 2008-07-09
  • 打赏
  • 举报
回复
我试了.设置双缓存也没有用,还是闪!!
JTFLSH 2008-07-08
  • 打赏
  • 举报
回复
如果说是防止加载了大图片闪烁的话,楼主不妨使用双缓冲的方式。PAINT事件里写上:
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true); // 禁止擦除背景.
SetStyle(ControlStyles.DoubleBuffer, true); // 双缓冲
ngnono 2008-07-08
  • 打赏
  • 举报
回复
咳。。。。。
再问一个问题
我以前用32位CPU XP系统 做的虚拟系统,可以正常使用。(P4630 1G内存 分给虚拟512M)
现在我换了一套新机器。64位CPU XP系统,(E4600 2G内存 分给虚拟1G)还用原先的虚拟系统,正常启动后,进入虚拟系统后点击鼠标右键菜单变透明了,而且鼠标移动有拖动效果,点击任何一个图标都会变花。不知道是什么原因。我已经装了virtual machine Additios.
而且我给虚拟机1G内存空间,速度反而比以前要慢。可以说根本无法使用
卧_槽 2008-07-03
  • 打赏
  • 举报
回复
闪的问题没有什么好的解决方法。加载大图片怎么样都会闪。
aimeast 2008-07-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ngnono 的回复:]
谢谢大家帮忙.
开启双缓冲..这个我不明白..
[/Quote]就是我的代码里写的那个ControlStyles.DoubleBuffer
ngnono 2008-06-30
  • 打赏
  • 举报
回复
谢谢大家帮忙.
开启双缓冲..这个我不明白..
das521 2008-06-30
  • 打赏
  • 举报
回复
帮顶,我也想知道!!!
aimeast 2008-06-30
  • 打赏
  • 举报
回复
开启双缓冲!!
SetStyle(ControlStyles.UserPaint | ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.ResizeRedraw | ControlStyles.SupportsTransparentBackColor, true);
shadowgreen 2008-06-30
  • 打赏
  • 举报
回复
不会哎···
友情UP
bluedodo 2008-06-30
  • 打赏
  • 举报
回复
楼主是不是用完一个窗口,就释放了?你可以在show之前先全部load,然后在需要的时候加载
赵一一 2008-06-30
  • 打赏
  • 举报
回复
不要关闭窗体。你可以把窗体隐藏起来Visible ,或者设置它的透明度Opacity 。
Form2 f2 = new Form2();
this.Opacity = 0.00;
//this.Visible = false;
f2.Show();
ngnono 2008-06-28
  • 打赏
  • 举报
回复
没人知道?还是我说的不详细?还是表达不清楚???

111,078

社区成员

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

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

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