0

在带有 winforms 的 .NET 3.5 中,我正在制作一个图像缩略图查看器控件。

主控件派生自a 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);
    }

如果需要,我会发布更多代码,但它很长,所以我不想放太多代码,除非确实有必要。

任何人都可以看到这是哪里出错了吗?

4

1 回答 1

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)));

成功了。不知道为什么一个有效而另一个无效......

于 2013-05-17T05:54:41.090 回答