当我设一个控件的位置时
如:
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)怎么解决这个问题

解决方案 »

  1.   

    其实我上面说的有问题:
    就是我滚动后,如top=300+3*30,left=300+2*20.得到的数是对的
    但是,结时是当前的绝对位置不是a=panel的最顶端为0,而是滚动到的最顶端为0
      

  2.   

    参考下: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 事件中将新值与旧值进行比较。
      

  3.   

    下面的代码示例使用 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);