Je to prasácké řešení a nefunguje pořádně, okna při tahání u krajů problikávají, ale z vlastní zkušenosti vím, že v 99% případů mají uživatelé MDI okno jen jedno maximalizované v celé aplikaci. Stačí vnitřnímu oknu ošetřit událost Move a hlídat, jestli nevyjelo z client area. Když vyjede, tak ho nějak usměrnit zpátky.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'vytvořit nové MDI child okno
Dim f2 As New Form2()
f2.MdiParent = Me
AddHandler f2.Move, AddressOf MdiChildMove
f2.Show()
End Sub
Private Sub MdiChildMove(ByVal sender As Object, ByVal e As EventArgs)
'při posouvání okna hlídat, aby se nedostalo z clientArea
Dim mdiChild As Form = CType(sender, Form)
If mdiChild.Left < Me.ClientRectangle.Left Then mdiChild.Left = Me.ClientRectangle.Left
If mdiChild.Top < Me.ClientRectangle.Top Then mdiChild.Top = Me.ClientRectangle.Top
If mdiChild.Left >= Me.ClientRectangle.Right - mdiChild.Width Then mdiChild.Left = Me.ClientRectangle.Right - mdiChild.Width
If mdiChild.Top >= Me.ClientRectangle.Bottom - mdiChild.Height Then mdiChild.Top = Me.ClientRectangle.Bottom - mdiChild.Height
End Sub
Je to ale fakt hnusné řešení.
|