在带有winforms的.NET 3.5中,我正在制作图像缩略图查看器控件。
主控件来自FlowLayoutPanel
,它获取图像列表并显示它们。显示的图像是由CustomControl
制作的,我在其上绘制和附带的标签以及控件的边框。
可以通过点击和yada yada来选择图像,就像你期望的那种控制一样。
这是一个截图:
那部分工作正常。问题是当我滚动FlowLayoutPanel
派生控件时,边框没有正确重绘,并且还有剩余的行,如此屏幕截图所示:
我已将FlowLayoutPanel
和图像设置为双缓冲。图像和标签没有问题,所以我怀疑它是别的东西,但无法弄清楚它是什么。
我认为用于绘制图像边框的方法可能有问题。这是我使用的代码:
protected override void OnPaint(PaintEventArgs e)
{
Rectangle captionContainer;
captionContainer = new Rectangle();
if (!string.IsNullOrEmpty(this.Caption))
captionContainer = this.DrawCaption(e.Graphics);
if (this.Image != null)
this.DrawImage(e.Graphics, captionContainer);
this.Size = new Size(this.Padding.Horizontal + this.ImageSize.Width, this.Padding.Vertical + this.ImageSize.Height + captionContainer.Height);
ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, this.currentBorderColor, ButtonBorderStyle.Solid);
base.OnPaint(e);
}
如果需要,我会发布更多代码,但它非常冗长,所以除非实际需要,否则我不想放太多代码。
有人能看出这出错的地方吗?
答案 0 :(得分:1)
我通过使用Graphics
对象绘制边框来解决问题。替换
ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, this.currentBorderColor, ButtonBorderStyle.Solid);
与
e.Graphics.DrawRectangle(new Pen(this.currentBorderColor, 1F), new Rectangle(Point.Empty, new Size(this.Width - 1, this.Height - 1)));
诀窍。不知道为什么一个人工作而不是另一个人工作......