日期:2014-05-20  浏览次数:21110 次

滚动滚动条后,位置不对的问题
当我设一个控件的位置时
如:
control1.top=   300+x*20;
control1.left   =300+y*20;

当我滚动滚动条后(panel),取的位置数据是对的,可是当滚动后,是以当前的最高点的位置(滚动后的最高位置为所看到的位置为0)。
是否懂我这意思?

就是我滚动后,如top=300+3*30,left=300+2*20.
可是显示后的得top=300+3*30+(我所滚动过的位置哪如500)

怎么解决这个问题




------解决方案--------------------
参考下:ScrollableControl.AutoScrollPosition 属性

备注:
ScrollableControl.AutoScrollPosition 属性
属性值
表示自动滚动位置的 Point,单位为像素。

AutoScrollPosition 属性用于调整可滚动控件上包含的控件的位置。

将控件添加到可滚动控件中时,必须加上或减去 AutoScrollPosition 的 x 坐标和 y 坐标,作为距离所添控件的 Control.Location 属性的相应坐标的偏移量。若要将控件添加到滚动位置的上方或左侧,则必须在目标位置的基础上加上该偏移量。如果将控件添加到滚动位置的下方或右侧,则必须减去该偏移量。

注意
AutoScrollPosition 表示可滚动控件显示框的位置。如果控件从其起始位置 (0,0) 开始向远离起始位置的方向滚动,则检索的 X 和 Y 坐标值将为负数。设置此属性时,必须总是指定正的 X 和 Y 值,以设置相对于起始位置的滚动位置。例如,如果有一个水平滚动条,x 和 y 都设置为 200,则该滚动条向右移动 200 个像素;如果又将 x 和 y 都设置为 100,则滚动条向左移动 100 个像素,原因是设置的 100 个像素是与起始位置的距离。第一次设置时,AutoScrollPosition 返回 {-200, 0};第二次设置时,它返回 {-100,0}。


若要检测 AutoScrollPosition 是否更改,请为 Paint 事件创建一个事件处理程序,将旧位置值保存在一个私有变量中,并在后续 Paint 事件中将新值与旧值进行比较。

------解决方案--------------------
下面的代码示例使用 ScrollableControl 派生类 Panel,将一个按钮添加到可滚动区域的左上角。示例允许 AutoScrollPosition 确定的偏距。编写该示例时,假定有一个 Form,其中包含一个 Panel,该面板上有一个 Button。若要启用自动滚动,应将该按钮置于 Panel 的工作区之外。

private void button1_Click(object sender, EventArgs e)
{
/* Add a button to top left corner of the
* scrollable area, allowing for the offset. */
panel1.AutoScroll = true;
Button myButton = new Button();
myButton.Location = new Point(
0 + panel1.AutoScrollPosition.X,
0 + panel1.AutoScrollPosition.Y);
panel1.Controls.Add(myButton);
}