我正在创建一个 UserControl,我想通过 ControlPaint.DrawBorder()
为其添加边框。
我为 OnPaint()
创建了一个覆盖,并将其放入其中:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
int Border_Width =1;
Color Border_Color =Color.FromArgb(170,170,170);
ControlPaint.DrawBorder(e.Graphics,e.ClipRectangle,
Border_Color,Border_Width,ButtonBorderStyle.Solid, //Left
Border_Color,Border_Width,ButtonBorderStyle.Solid, //Top
Border_Color,Border_Width,ButtonBorderStyle.Solid, //Right
Border_Color,Border_Width,ButtonBorderStyle.Solid); //Bottom
}
边框画的很好,但是自从我加了那个之后,问题就来了:
每当我将其他窗口拖到该用户控件上时,我都会在用户控件上出现“残留物”。
看看它的样子:
在覆盖 OnPaint() 之前:
覆盖 OnPaint() 之后:
为什么会这样?
根据我的实验,
尝试启用 DubbleBuffering 在这里没有帮助.. 涂抹仍然存在..
此外,如果我禁用 ControlPaint.DrawBorder()
行,
并将其替换为 e.Graphics.DrawRectangle()
,
然后问题就消失了..
所以这意味着问题不一定在于覆盖 OnPaint()
或类似的东西,而是在于 ControlPaint.DrawBorder()
。
ControlPaint
类在它提供的其他绘图操作中是否存在问题?
是否有解决办法,或者由于这个错误应该避免它?
最佳答案
您似乎使用 cliprect 来绘制边框,这意味着只有控件中应该重绘的部分。使用控件尺寸/坐标绘制边框。
关于c# - GDI+ 拖拽窗口到 UserControl 后的拖尾现象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34542599/