Question

Le contrôle parent MDI par défaut a un grand " bureau " zone pouvant afficher plusieurs formulaires enfants. Les utilisateurs peuvent faire glisser des formulaires vers le bord de cette zone du bureau afin que la plupart des formulaires enfants ne soient plus affichés. (Une barre de défilement apparaît alors dans le parent MDI) Je n'aime pas cette fonctionnalité. Existe-t-il un moyen de verrouiller le bord de la zone du bureau pour que les formulaires enfants restent entièrement visibles?

Était-ce utile?

La solution

  1. Désactiver les barres de défilement de la fenêtre MDI
  2. Décrochez l'événement OnMove de toutes les fenêtres enfants. Si la fenêtre est déplacée en dehors de la limite, " pop " retour le long des x et y jusqu’à ce qu’il soit de retour dans le parent.

Autres conseils

Code que j'ai utilisé pour implémenter la réponse que j'ai sélectionnée ci-dessus:

Public alreadyMoved As Boolean = False
Public Const HEIGHT_OF_MENU_STATUS_BARS As Integer = 50
Public Const WIDTH_OF_MENU_STATUS_BARS As Integer = 141
Private Sub Form_Move(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Move
    If Not alreadyMoved Then
        alreadyMoved = True

        'If I'm over the right boundry, drop back to right against that edge
        If Me.Location.X + Me.Width > _
            MdiParent.ClientRectangle.Width - WIDTH_OF_MENU_STATUS_BARS Then
            MyBase.Location = New System.Drawing.Point( _
                (MdiParent.ClientRectangle.Width - Me.Width - _
                WIDTH_OF_MENU_STATUS_BARS), MyBase.Location.Y)
        End If

        'If I'm over the bottom boundry, drop back to right against that edge
        If Me.Location.Y + Me.Height > _
            MdiParent.ClientRectangle.Height - HEIGHT_OF_MENU_STATUS_BARS Then
            MyBase.Location = New System.Drawing.Point( _
                MyBase.Location.X, (MdiParent.ClientRectangle.Height - _
                Me.Height - HEIGHT_OF_MENU_STATUS_BARS))
        End If

        'If I'm over the top boundry, drop back to the edge
        If Me.Location.Y < 0 Then
            MyBase.Location = New System.Drawing.Point(MyBase.Location.X, 0)
        End If

        'If I'm over the left boundry, drop back to the edge
        If Me.Location.X < 0 Then
            MyBase.Location = New System.Drawing.Point(0, MyBase.Location.Y)
        End If
    End If
    alreadyMoved = False
End Sub

Pour clarifier, ce que vous dites est le "bureau". La zone du client MDI est la zone client.

Vous pouvez gérer les gestionnaires d'événements resize / move des formulaires enfants, puis redimensionner / restreindre le mouvement de l'enfant lorsqu'il dépasse les limites de la zone client MDI.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top