在效果截图中大家可以看见,当我将重绘了窗体颜色的窗体拖至停靠控件出现的小方格上后,移开窗体,窗体上就出现了小方格的阴影...不知如何去掉这个移动时产生的效果重绘代码如下:        protected override void OnPaint(PaintEventArgs e)
        {
            Rectangle rect = e.ClipRectangle;
            BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current;
            BufferedGraphics myBuffer = currentContext.Allocate(e.Graphics, e.ClipRectangle);
            Graphics g = myBuffer.Graphics;
            g.SmoothingMode = SmoothingMode.HighQuality;
            g.PixelOffsetMode = PixelOffsetMode.HighSpeed;
            g.Clear(Color.Transparent);            Brush backbrush =
            new LinearGradientBrush(rect, Color.White, Color.FromArgb(125,125,125),LinearGradientMode.Vertical);             g.FillRectangle(backbrush, rect);            myBuffer.Render(e.Graphics);
            g.Dispose();
            backbrush.Dispose();
            myBuffer.Dispose();            base.OnPaint(e);
        }        private void Form1_Load(object sender, EventArgs e)
        {
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer |
                    ControlStyles.ResizeRedraw |
                    ControlStyles.AllPaintingInWmPaint, true);
        } 效果截图顺序: 一开始.bmp → 拖动窗体至停靠小方格所在位置.bmp → 放开窗体.bmp → 将窗体由停靠小方格所在位置移开.bmp

解决方案 »

  1.   

     protected override void OnPaint(PaintEventArgs e) 
            { 
                Rectangle rect = ClientRectangle;
                BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current; 
                BufferedGraphics myBuffer = currentContext.Allocate(e.Graphics, e.ClipRectangle); 
                Graphics g = myBuffer.Graphics; 
                g.SmoothingMode = SmoothingMode.HighQuality; 
                g.PixelOffsetMode = PixelOffsetMode.HighSpeed; 
                g.Clear(Color.Transparent);             Brush backbrush = 
                new LinearGradientBrush(rect, Color.White, Color.FromArgb(125,125,125),LinearGradientMode.Vertical);             g.FillRectangle(backbrush, rect);             myBuffer.Render(e.Graphics); 
                g.Dispose(); 
                backbrush.Dispose(); 
                myBuffer.Dispose();             base.OnPaint(e); 
            }         private void Form1_Load(object sender, EventArgs e) 
            { 
                this.SetStyle(ControlStyles.OptimizedDoubleBuffer | 
                        ControlStyles.ResizeRedraw | 
                        ControlStyles.AllPaintingInWmPaint, true); 
            } 
    你的代码只是重绘被窗口覆盖了的clip区域
      

  2.   

    To zx005:很抱歉,上传的效果图下载不了,无法让你们看到效果.我这里若修改的话,该如何修改呢?