在绘制对象时Winform不滚动

时间:2010-04-09 17:10:27

标签: c# winforms scroll drawing

C#3.0,.net framework 3.5 我正在绘制(使用图形类中的draw方法)窗体上的许多实心矩形垂直。表格从500 x 500像素开始,矩形只在数据从网上下载后在运行时绘制 - 矩形的数量取决于下载,所以我不知道它是在前面。

因此,只有几个矩形被绘制,因为窗体的大小是固定的。 所以我用google搜索/ Binged(以免有人建议我这样做)并找到一些提示,但它们在这种情况下不起作用 - 比如将表单AutoScroll属性设置为true或尝试双缓冲。我也试图在列表框控件上绘图并设置它的滚动属性等...但没有骰子。

我猜测无法显示,使用绘图在窗体上垂直显示200个矩形。我需要一些其他解决方案......请提出任何想法。

可能是一个图片框列表,然后用纯色填充每个图片框?

由于

1 个答案:

答案 0 :(得分:7)

你在绘画活动期间在表格上绘制GDI +矩形?表单不知道你是在剪辑空间之外创建对象,因此不知道你需要滚动。

您需要向表单添加滚动条,然后计算滚动条的值\位置,并使用它来确定要在paint事件上绘制的矩形部分。这将涉及一些手动努力。您可以将它们全部绘制到适当大小的内存中位图,然后在绘制时将其部分复制到表单中。

或者:

如果您希望表单为您执行此操作,请创建一个自定义矩形控件并在表单上放置200个。因为它们是组件并且具有混凝土高度和高度。宽度,然后表单将知道它需要滚动,并且如果设置了自动滚动,则相应地这样做。

它可以这么简单:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.DoubleBuffered = true;
            this.AutoScroll = true;
            for (int i = 0; i < 100; i++)
                this.Controls.Add(new Rectangle() { Top = i * 120, Left = 10 });

        }
    }

    public class Rectangle : Control
    {
        public Rectangle()
        {
            this.Width = 100;
            this.Height = 100;
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            e.Graphics.DrawRectangle(new Pen(Color.Black, 5), 0, 0, 100, 100);
        }
    }