如题,主要是为了防止刷新时候出现闪烁!各位贴贴代码

解决方案 »

  1.   

    http://blog.csdn.net/zgke/archive/2009/01/06/3718989.aspx看看这个
      

  2.   

    不用双缓存,因为我是在一个Map控件里拖动,它自身刷新,双缓存没用!
      

  3.   

    在拖动事件中,在鼠标周围绘制一个边框,和控件的边框一致,和鼠标一起移动。
    在MouseUp事件中再将实际的控件移动到鼠标的位置。
      

  4.   

    可以先锁住画面,待移动结束再刷新,有这方面的API
      

  5.   

    当托动的时候不要真正的托动目标控件,而是画一个简单的橡皮条效果。
    用ControlPaint.DrawReversibleFrame 可以实现。
      

  6.   

    // The following three methods will draw a rectangle and allow 
    // the user to use the mouse to resize the rectangle.  If the 
    // rectangle intersects a control's client rectangle, the 
    // control's color will change.bool isDrag = false;
    Rectangle theRectangle = new Rectangle
        (new Point(0, 0), new Size(0, 0));
    Point startPoint;private void Form1_MouseDown(object sender, 
        System.Windows.Forms.MouseEventArgs e)
    {    // Set the isDrag variable to true and get the starting point 
        // by using the PointToScreen method to convert form 
        // coordinates to screen coordinates.
        if (e.Button==MouseButtons.Left)
        {
            isDrag = true;
        }    Control control = (Control) sender;    // Calculate the startPoint by using the PointToScreen 
        // method.
        startPoint = control.PointToScreen(new Point(e.X, e.Y));
    }private void Form1_MouseMove(object sender, 
        System.Windows.Forms.MouseEventArgs e)
    {    // If the mouse is being dragged, 
        // undraw and redraw the rectangle as the mouse moves.
        if (isDrag)        // Hide the previous rectangle by calling the 
            // DrawReversibleFrame method with the same parameters.
        {
            ControlPaint.DrawReversibleFrame(theRectangle, 
                this.BackColor, FrameStyle.Dashed);        // Calculate the endpoint and dimensions for the new 
            // rectangle, again using the PointToScreen method.
            Point endPoint = this.PointToScreen(new Point(e.X, e.Y));
            int width = endPoint.X-startPoint.X;
            int height = endPoint.Y-startPoint.Y;
            theRectangle = new Rectangle(startPoint.X, 
                startPoint.Y, width, height);        // Draw the new rectangle by calling DrawReversibleFrame
            // again.  
            ControlPaint.DrawReversibleFrame(theRectangle, 
                this.BackColor, FrameStyle.Dashed);
        }
    }private void Form1_MouseUp(object sender, 
        System.Windows.Forms.MouseEventArgs e)
    {    // If the MouseUp event occurs, the user is not dragging.
        isDrag = false;    // Draw the rectangle to be evaluated. Set a dashed frame style 
        // using the FrameStyle enumeration.
        ControlPaint.DrawReversibleFrame(theRectangle, 
            this.BackColor, FrameStyle.Dashed);    // Find out which controls intersect the rectangle and 
        // change their color. The method uses the RectangleToScreen  
        // method to convert the Control's client coordinates 
        // to screen coordinates.
        Rectangle controlRectangle;
        for(int i = 0; i < Controls.Count; i++)
        {
            controlRectangle = Controls[i].RectangleToScreen
                (Controls[i].ClientRectangle);
            if (controlRectangle.IntersectsWith(theRectangle))
            {
                Controls[i].BackColor = Color.BurlyWood;
            }
        }    // Reset the rectangle.
        theRectangle = new Rectangle(0, 0, 0, 0);
    }