是否可以在WinForms中逐步触发“假”滚动?
情景:
使用System.Drawing完成各种绘图的表单(并且没有滚动条)。
我想要什么:
这可能还是我需要自己处理?
答案 0 :(得分:3)
您可以将表单添加到比表单大的表单中。保持滚动条关闭,并通过设置Panel的VerticalScroll和HorizontalScroll属性的值属性手动滚动面板。
然后将图形添加到面板而不是表单。
this.panel1.VerticalScroll.Value = 50;
this.panel1.HorizontalScroll.Value = 100;
答案 1 :(得分:1)
老实说,我不知道这是否有效,但我的猜测是,如果表单上没有滚动条,则不会。
但是,我希望如果你的PictureBox控件的大小比表单的客户区大,并且你移动了它,它将仅使用特定的剪辑区域进行更新。
答案 2 :(得分:1)
您可以尝试将绘图放在单独的容器中,然后将容器的位置移动到主窗体之外的位置。例如.location = -10,0。这将产生幻觉,它将一定数量的像素移出屏幕。如果位置更改未成功执行此操作,您也可以始终触发自己的重绘事件。除此之外,你可以随时拥有一切。
答案 3 :(得分:1)
由于您正在使用System.Drawing,因此您需要告诉绘图方法(OnPaint()或您正在绘制的位置)以-10像素的x偏移量开始绘制。你绘制的所有东西都会被这个数量抵消。
将整个图形向左移动10个像素将导致整个屏幕区域无效,而不仅仅是屏幕右侧的10个像素。有几种方法可以做到这一点:
1)将偏移设置为 - = 10像素。通过调用Invalidate()使整个屏幕无效。这将强制重绘整个屏幕,只要您正确编码了偏移量,就会重绘10个像素以上的所有内容。 2)对屏幕上的内容进行内存转储并从中制作图像。然后将该图像重新绘制在屏幕左侧10个像素的位置。之后,只需使最右边的10个像素无效。
方法#2实际上比方法#1慢很多。如果您没有需要绘制的数百万件事,那么重绘屏幕的速度非常快。