【问题标题】:Stop form from scrolling when moving controls移动控件时停止表单滚动
【发布时间】:2015-09-10 22:02:44
【问题描述】:

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

当移动控件时,如果它们被移出窗体的客户区,滚动条就会显示出来。这是我的意图。

现在,表单将自动向下滚动,因此当用户不释放鼠标时,控件将继续向下移动。这显然不是故意的。

我已经尝试在移动(或调整大小)开始时禁用自动滚动,但没有好处...如果控件超出了表单的客户端,一旦开始移动,它就会向上(或向左)移动。

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

---编辑:示例代码---

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

//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);
}

当我移出表单边界时,滚动条出现并开始向下/向右滚动以适应控件...由于存在鼠标移动事件,这反过来又移动了控件,依此类推...

【问题讨论】:

  • 我的建议是防止超出表单的客户区。您知道控件的宽度、鼠标的位置等,应该很容易做到。和/或防止选择(部分)超出客户区域的控件(或者,一旦选择,将滚动位置设置得足够高,使其“在视图中”)。
  • 啊,问题是我需要额外的空间......我正在显示/编辑的数据可能而且可能不适合表格。
  • 您可能会想到您在 Visual Studio 上处理类图的区域......图表可能超出可见范围,就像我的数据一样。

标签: c# .net winforms


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    相关资源
    最近更新 更多