移动控件时停止窗体滚动

本文关键字:窗体 滚动 移动控件 | 更新日期: 2023-09-27 18:12:09

我有一个开启自动滚动的表单,并且在表单中有一个用户可编辑的区域。用户可以调整或移动控件。

在移动控件时,如果控件移动到表单的客户端区域之外,将显示滚动条。这就是我的意图。

现在,表单将自动向下滚动,所以当用户不释放鼠标时,控件将继续向下移动。这显然不是我想要的。

我试过在移动(或调整大小)开始时禁用自动调节,但没有效果…如果控件超出了表单的客户端范围,则一旦开始移动,它就会向上(或向左)移动。

当我移动子控件时,锁定滚动条的方法是什么?

——编辑:示例代码——

只是一个关于移动控件的例子。

//Start moving if the button is clicked on
public void Button1_OnMouseDown()
{
   _moving=true;
}

//If the button was clicked on, move it to mouse position
public void OnMouseMove(object sender, MouseEventArgs e)
{
     if(_moving)
         Button1.Location=new Poiny(e.X, e.Y);
}

当我移出表单的边界时,滚动条出现并开始向下/向右滚动以适合控件…因为有鼠标移动事件,所以它会依次移动控件,等等…

移动控件时停止窗体滚动

您可以通过覆盖ScrollToControl方法来阻止FormPanel滚动,例如:

protected override Point ScrollToControl(Control activeControl) {
    Point pt = this.AutoScrollPosition;
    return pt;
}