C# Winform在其上绘制对象时不滚动

C# Winform在其上绘制对象时不滚动,c#,winforms,scroll,drawing,C#,Winforms,Scroll,Drawing,C#3.0、.net framework 3.5 我正在垂直地在windows窗体上绘制(使用graphics类中的draw方法)许多实心矩形。表单从500x500px开始,只有在从网络下载数据后,才会在运行时绘制矩形,而矩形的数量取决于下载,所以我不知道它的前期 因此,当窗体的大小固定时,只绘制几个矩形。 所以我在谷歌上搜索了一下(以免有人建议我这么做),找到了一些技巧,但在这种情况下它们不起作用——比如将forms AutoScroll属性设置为true或尝试双缓冲。我还尝试在listbox

C#3.0、.net framework 3.5 我正在垂直地在windows窗体上绘制(使用graphics类中的draw方法)许多实心矩形。表单从500x500px开始,只有在从网络下载数据后,才会在运行时绘制矩形,而矩形的数量取决于下载,所以我不知道它的前期

因此,当窗体的大小固定时,只绘制几个矩形。 所以我在谷歌上搜索了一下(以免有人建议我这么做),找到了一些技巧,但在这种情况下它们不起作用——比如将forms AutoScroll属性设置为true或尝试双缓冲。我还尝试在listbox控件上画图,设置它的scroll属性等等……但没有骰子

我猜没有办法显示,比如说使用draw在windows窗体上垂直显示200个矩形。我需要一些其他的解决方案。。。有什么想法吗

可能是一个picturebox列表,然后用纯色填充每个picturebox


谢谢

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

您需要将滚动条添加到表单中,然后计算滚动条的值\位置,并使用该值确定绘制事件时要绘制的矩形部分。这需要一点手动操作。您可以将它们全部绘制到适当大小的内存位图中,然后在绘制时将其中的部分复制到窗体中

或:

如果希望表单为您执行此操作,请创建一个自定义矩形控件,并将其中的200个放置在表单上。由于它们是组件,并且具有具体的高度和宽度,因此窗体将知道需要滚动,并且如果设置了autoscroll,则会相应地进行滚动

可以这么简单:

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);
        }
    }
公共部分类表单1:表单
{
公共表格1()
{
初始化组件();
this.DoubleBuffered=true;
this.AutoScroll=true;
对于(int i=0;i<100;i++)
Add(新矩形(){Top=i*120,Left=10});
}
}
公共类矩形:控件
{
公共矩形()
{
这个。宽度=100;
这个。高度=100;
}
受保护的覆盖无效OnPaint(PaintEventArgs e)
{
e、 图形。DrawRectangle(新笔(颜色:黑色,5),0,0,100,100);
}
}

你想得到什么样的行为?我希望所有200个矩形都能在表单上绘制并通过滚动查看。另一种方法是对传入数据进行分页,这样我就可以只显示20个矩形,而无需担心滚动。现在要了解如何分页数据。。。。