在效果截图中大家可以看见,当我将重绘了窗体颜色的窗体拖至停靠控件出现的小方格上后,移开窗体,窗体上就出现了小方格的阴影...不知如何去掉这个移动时产生的效果重绘代码如下: 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
{
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
解决方案 »
- C#:SQL ERROR_MESSAGE返回到客户端IE,不能显示
- post 注册163邮箱提示{message:"fail"}
- 网游,问道自动喊话器的原理
- 一个关于下载的难题.......................
- 新闻发布系统(增删改页面)明天交作业 大侠帮忙
- c# 中能够实现以网格方式输入、编辑、显示内容的控件有哪些?哪个更好?
- [简单丢人的问题]
- 如何在listview的双击事件中调用treeview的双击事件?
- 想定义一个4个按钮都能用的数组变量a[16],并且用的时候是上一个运算后付给它的值
- 急求c# 与三菱plc 以太网通讯 案例 源代码
- C#怎么实现金山词霸取词功能[Ctrl+Alt+F1]
- 关于datagridview更新问题
{
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区域