2

複数のフォーム コントロールを格納できるコンテナー (パネル) があります。(Form.TopLevel = False)

ユーザーがフォームを移動すると、フォームがパネルの境界外にあるときにスクロールバーを表示したいと思います。

Form.Move イベントを登録すると、AutoScrollPosition を設定できます。これは、ユーザーがスクロールバーを使用しない限り機能します。問題は、スクロールバーの使用時に form.move イベントも発生することです。その結果、スクロールバーが機能しなくなります。(そして、現在、フォームがマウスまたはスクロールバーによって移動されたかどうかを確認する方法がわかりません)

質問は次のとおりです。パネルのフォーム (または複数の) フォームが境界を超えたときに、パネルのスクロールバーを表示/機能させるにはどうすればよいですか? move イベントを処理するよりも簡単な方法が必要だと思います..

注: パネルは Infragistics DockableControlPane 内に配置されます。(UltraDockManager によって管理されます) (したがって、パネルごとに少なくとも 1 つのフォームを含む複数のパネルがあります) その理由は、「パネル」がタブとして表示され、DockManager を使用して移動し、それらの「サブ」フォームを表示できるためです (どのパネル上で移動することもできます)。

どんなアイデアでも素晴らしいでしょう

4

1 に答える 1

1

LocationChanged イベントが使用できるようです。フォームが 1 つだけの例:

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 に答える