2009-03-02 10 views
4

Le contrôle parent MDI par défaut comporte une grande zone "Bureau" qui peut afficher plusieurs formulaires enfants. Les utilisateurs peuvent faire glisser des formulaires vers le bord de cette zone de bureau afin que la majeure partie du formulaire enfant ne soit pas affichée. (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 de bureau pour que les formes enfants restent entièrement visibles?Winforms MDI "Desktop" Zone Boundry

Répondre

3
  1. Désactiver la fenêtre MDI scrollbars
  2. Accrocher l'événement OnMove de toutes les fenêtres de l'enfant. Si la fenêtre est déplacée à l'extérieur de la limite, remettez-la en place le long des x et y jusqu'à ce qu'elle revienne à l'intérieur du parent.
+1

Voir mon code ci-dessous qui contient du code qui. – Jeff

3

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

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

5

Le code que je l'habitude de mettre en œuvre la réponse que je choisi 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 
Questions connexes