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