C#3.0,.net framework 3.5 我正在绘制(使用图形类中的draw方法)窗体上的许多实心矩形垂直。表格从500 x 500像素开始,矩形只在数据从网上下载后在运行时绘制 - 矩形的数量取决于下载,所以我不知道它是在前面。
因此,只有几个矩形被绘制,因为窗体的大小是固定的。 所以我用google搜索/ Binged(以免有人建议我这样做)并找到一些提示,但它们在这种情况下不起作用 - 比如将表单AutoScroll属性设置为true或尝试双缓冲。我也试图在列表框控件上绘图并设置它的滚动属性等...但没有骰子。
我猜测无法显示,使用绘图在窗体上垂直显示200个矩形。我需要一些其他解决方案......请提出任何想法。
可能是一个图片框列表,然后用纯色填充每个图片框?
由于
答案 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);
}
}