苏飞论坛

标题: 在控件上进行动态绘制时不让其闪烁 [打印本页]

作者: tangshun    时间: 2013-5-25 02:38
标题: 在控件上进行动态绘制时不让其闪烁
本帖最后由 tangshun 于 2013-5-25 03:11 编辑

一般情况下,在控件上进行动态绘制时,会出现闪烁效果,为了解决这一问题,可以用SetStyle方法来减少控件的闪烁。下面在窗体中将panel1控件设置为不闪烁的效果。代码如下:
[code=csharp]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace ppp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
//定义一个Panel控件的类,在该类中对Panel控件的样式进行一下设置,使其减少闪烁功能。代码如下:
        public class pp : Panel
        {
            public pp()
            {
                SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
                UpdateStyles();
            }
        }
//说明:ControlStyles.OptimizedDoubleBuffer值是先在缓冲区中绘制,而不是直接绘制在屏幕上。ControlStyles.AllPaintingInWmPaint值是用来减少闪烁。
//在窗体的加载事件中,窗体中的panel1控件进行实例化,以实现不让其闪烁。代码如下:
        private void Form1_Load(object sender, EventArgs e)
        {
            panel1 = new pp();
        }
    }
}
//在制作第三方控件时,也可以直接去除闪烁效果,直接将大括号中的代码添加到第三方控件的重载方法中(以自定义控件Panel为例)。代码如下所示:
    public partial class UserPanel : Panel
    {
        public UserPanel()
        {
            InitializeComponent();
            SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
            UpdateStyles();
        }
    }
[/code]


作者: lyg1112    时间: 2015-3-18 10:39
treeview可以吗




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4