2

我有一个可以包含多个表单控件的容器(面板)。(Form.TopLevel = False)

当用户移动表单时,我想在表单超出面板边界时显示滚动条。

当我注册 Form.Move 事件时,我可以设置 AutoScrollPosition。除非用户使用滚动条,否则此方法有效。问题是使用滚动条时也会触发 form.move 事件。结果是滚动条不起作用。(而且我目前不知道如何确定表单是否被鼠标或滚动条移动)

所以问题是:当面板的一个(或多个)表单超出边界时,如何使面板的滚动条出现/工作?我认为必须有比处理移动事件更简单的方法..

注意:面板位于 Infragistics DockableControlPane 内。(由 UltraDockManager 管理)(因此有多个面板,每个面板至少包含一个表单)原因是“面板”应该显示为选项卡,可以使用 DockManager 移动并显示它们的“子”表单(其中也可以在他们的面板上移动)。

任何想法都会很棒

4

1 回答 1

1

看起来可以使用 LocationChanged 事件。只有一种形式的示例:

Protected Overrides Sub OnLoad(e As EventArgs)
  MyBase.OnLoad(e)

  Dim f As New Form
  f.TopLevel = False
  AddHandler f.LocationChanged, AddressOf Form_LocationChanged
  Panel1.Controls.Add(f)
  f.Show()
  Call Form_LocationChanged(f, EventArgs.Empty)
End Sub

Private Sub Form_LocationChanged(sender As Object, e As EventArgs)
  With DirectCast(sender, Form)
    Panel1.AutoScrollMinSize = New Size(.Bounds.Right, .Bounds.Bottom)
  End With
End Sub

尽管对于这样的事情,使用 MDI 表单似乎更合适。

于 2012-09-12T13:19:11.727 回答