是否有可能在WinForms中以编程方式触发“假”滚动?

时间:2009-05-04 19:07:56

标签: c# .net winforms scroll

是否可以在WinForms中逐步触发“假”滚动?

情景:
使用System.Drawing完成各种绘图的表单(并且没有滚动条)。

我想要什么:

  1. 以图形方式告诉用户表单用户向左滚动了10个像素。
  2. 表单将现有图形向左移动10个像素。
  3. Form生成一个Paint事件,其ClipRectangle只包含现在为空的右侧10个像素。

这可能还是我需要自己处理?

4 个答案:

答案 0 :(得分:3)

您可以将表单添加到比表单大的表单中。保持滚动条关闭,并通过设置Panel的VerticalScroll和Horizo​​ntalScroll属性的值属性手动滚动面板。

然后将图形添加到面板而不是表单。

 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慢很多。如果您没有需要绘制的数百万件事,那么重绘屏幕的速度非常快。