当前位置:编程学习 > C#/ASP.NET >>

请问,如何让窗体重绘时,不发抖

如何让窗体重绘时,不发抖,静静地、悄悄滴....重绘 --------------------编程问答-------------------- 发抖。静静地,悄悄地。。。
你用词好逗啊

使用双缓冲吧,好多人说双缓冲可以解决这个问题,可我就是没用过

--------------------编程问答-------------------- 顶顶嗬嗬嗬嗬 --------------------编程问答--------------------

如何:双缓冲窗体以减少闪烁
Visual C# 语言概念
如何:双缓冲窗体以减少闪烁 (Visual C#)
本示例演示如何使用双缓冲来减少闪烁。如果刷新包含多个控件的窗体,所有单个控件在被重绘时可能会产生闪烁效果。若要减弱这种效果,请对窗体应用 ControlStyles,如以下所示。

示例
this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint , true);
--------------------编程问答-------------------- 我也在想如何使用双缓存的问题:有段代码 lz看看
 public class panGame : Panel
    {
        public void pGame()
        {
            //Set the value of the double-buffering style bits to true.
            SetStyle(ControlStyles.DoubleBuffer |
               ControlStyles.UserPaint |
               ControlStyles.AllPaintingInWmPaint,
               false);
            this.UpdateStyles();
        }
    }
双缓存可以避免GDI+绘制图像的闪烁等等一些问题。。 --------------------编程问答-------------------- 哎,本人的位运算也没学,"|"符号是啥意思啊?
能不能举个例子,我先照搬用上再说,就举个Panel1重绘的例子吧,谢谢了!!! --------------------编程问答--------------------
引用 4 楼 huzhenfeng1111 的回复:
我也在想如何使用双缓存的问题:有段代码 lz看看
 public class panGame : Panel
    {
        public void pGame()
        {
            //Set the value of the double-buffering style bits to true.
            SetStyle(C……

改成
SetStyle(ControlStyles.DoubleBuffer |
  ControlStyles.UserPaint |
  ControlStyles.AllPaintingInWmPaint,
  true);

放在构造函数里 --------------------编程问答-------------------- |用来合并选项的,这样SetStyle一个参数就可以设几个选项了
引用 5 楼 sevsd3 的回复:
哎,本人的位运算也没学,"|"符号是啥意思啊?
能不能举个例子,我先照搬用上再说,就举个Panel1重绘的例子吧,谢谢了!!!
--------------------编程问答-------------------- 重绘开始前BeginUpdate().  重绘结束时 EndUpdate() .
这样在 EndUpdate()时才重绘,可以有效减少闪烁。 --------------------编程问答--------------------
引用 6 楼 lmaohuanl 的回复:
改成
SetStyle(ControlStyles.DoubleBuffer |
  ControlStyles.UserPaint |
  ControlStyles.AllPaintingInWmPaint,
  true);

放在构造函数里

哎!!!
 panel1.Invalidate();

还是闪得厉害 --------------------编程问答-------------------- 还是你那边写的不对吧,双缓冲的原理是,所有的绘制都是绘制在内存里,然后所有的绘制结束后才会将结果放到界面上,不会出现闪烁
引用 9 楼 sevsd3 的回复:
哎!!!
 panel1.Invalidate();

还是闪得厉害
--------------------编程问答-------------------- 请问该怎么写? --------------------编程问答--------------------
LZ好厉害 --------------------编程问答-------------------- 发抖是因为你太频繁了 --------------------编程问答--------------------
引用 13 楼 sp1234 的回复:
发抖是因为你太频繁了

不频繁啊,就是调用 panel1.Invalidate();方法 --------------------编程问答-------------------- 学习! --------------------编程问答-------------------- 没用过,学习 --------------------编程问答-------------------- 在哪调用的Invalidate方法?Invalidate会引发刷新的,不会频繁调用。 --------------------编程问答-------------------- 对于panel更是没必要频繁调用Invalidate,一般只在大小变化等事件中,由控件自己触发,也不用自己显示调用。 --------------------编程问答-------------------- 呵呵,帮顶 --------------------编程问答--------------------
引用 18 楼 lazyleland 的回复:
对于panel更是没必要频繁调用Invalidate,一般只在大小变化等事件中,由控件自己触发,也不用自己显示调用。

我是在Panel1中画图,如果不panel1.Invalidate,新画的图,怎么能显示呢?需要主动重绘啊 --------------------编程问答-------------------- 嵌套一个picbox再画图吧。你这样刷透明背景的东西,当然往死了抖动。 --------------------编程问答-------------------- this.panel1.CreateGraphics().DrawImage(_bmp, 0, 0); --------------------编程问答--------------------
引用 22 楼 fdh120 的回复:
this.panel1.CreateGraphics().DrawImage(_bmp, 0, 0);

这是啥意思,起何作用,请问? --------------------编程问答-------------------- http://topic.csdn.net/u/20110424/15/ee9f8d1f-989f-468d-b034-24376d733d52.html我以前问别人的帖子 --------------------编程问答-------------------- 使用双缓冲

但是要注意,如果不需要重绘制的地方,就不要绘制,绘制的东西太多,而且太频繁,即使使用了双缓冲,也是会抖的 --------------------编程问答--------------------
引用 25 楼 wangyong0921 的回复:
使用双缓冲

但是要注意,如果不需要重绘制的地方,就不要绘制,绘制的东西太多,而且太频繁,即使使用了双缓冲,也是会抖的

双缓冲,我不会啊 --------------------编程问答--------------------
引用 26 楼 sevsd3 的回复:
引用 25 楼 wangyong0921 的回复:
使用双缓冲

但是要注意,如果不需要重绘制的地方,就不要绘制,绘制的东西太多,而且太频繁,即使使用了双缓冲,也是会抖的

双缓冲,我不会啊



SetStyle(ControlStyles.DoubleBuffer |
  ControlStyles.UserPaint |
  ControlStyles.AllPaintingInWmPaint,
  true);
--------------------编程问答-------------------- 别吓唬她,她就不发抖了。跟她说悄悄话,她就跟你好了。 --------------------编程问答--------------------
引用 28 楼 skygpan 的回复:
别吓唬她,她就不发抖了。跟她说悄悄话,她就跟你好了。
--------------------编程问答--------------------
引用 27 楼 wangyong0921 的回复:
引用 26 楼 sevsd3 的回复:

引用 25 楼 wangyong0921 的回复:
使用双缓冲

但是要注意,如果不需要重绘制的地方,就不要绘制,绘制的东西太多,而且太频繁,即使使用了双缓冲,也是会抖的

双缓冲,我不会啊



C# code

SetStyle(ControlStyles.DoubleBuffer |
  ControlStyles.Use……

是不是在构造函数里面写:
pane11.SetStyle(ControlStyles.DoubleBuffer |
  ControlStyles.UserPaint |
  ControlStyles.AllPaintingInWmPaint,
  true);

--------------------编程问答-------------------- 鹅鹅鹅 --------------------编程问答-------------------- 等待答案 --------------------编程问答-------------------- 等待答案 --------------------编程问答-------------------- 控件是属性里DoubleBuffered设置为true --------------------编程问答-------------------- 请教大师,到底如何使用双缓冲,防止重绘发抖 --------------------编程问答-------------------- 有大师能给说下啥叫双缓存么???看了好多这样的贴,还是不懂,什么是双缓存~~ --------------------编程问答-------------------- 说句实话,对于控件比较多的窗体,使用了 双缓存 也是抖的。
即使你不吓唬她 --------------------编程问答--------------------
引用 37 楼 sjfbtnmcn 的回复:
说句实话,对于控件比较多的窗体,使用了 双缓存 也是抖的。
即使你不吓唬她

是吗?我的图上有几百个label,不过宽度为1,像一条线,这样的图,双缓冲,也要抖? --------------------编程问答-------------------- 学习了。。 --------------------编程问答--------------------
引用 36 楼 fengxuan0312 的回复:
有大师能给说下啥叫双缓存么???看了好多这样的贴,还是不懂,什么是双缓存~~

等待答案 --------------------编程问答-------------------- --------------------编程问答-------------------- 扯淡的多,真正的回答正题的少。 --------------------编程问答--------------------
引用 42 楼 mjhf888 的回复:
扯淡的多,真正的回答正题的少。

就是
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,