2010-07-16 2 views
0

J'essaie de créer un contrôle utilisateur qui fournira un séparateur déplaçable entre deux panneaux - exactement comme SplitContainer - dans une implémentation IDesignerHost personnalisée. SplitContainer lui-même, autant que je peux dire, n'est pas une option; il déclenchera une exception à moins d'être utilisé dans le concepteur de Visual Studio.Attraper des événements de souris pour un SplitContainerDesigner personnalisé

Mon implémentation ressemblerait à peu près à this, sauf que je ne reçois pas les événements de souris nécessaires. Je l'ai essayé des gestionnaires d'événements, On* et dominante WndProc overrides dans le contrôle de l'utilisateur lui-même, le contrôle de l'hôte, et la forme mère, mais je ne parais pas recevoir WM_MOUSEMOVE, WM_LBUTTONDOWN ou WM_LBUTTONUP événements partout. Pour this bug report, je devrais recevoir WM_MOUSEMOVE dans "le concepteur de contrôle"; Je ne suis pas sûr de ce que cela signifie dans ce cas.

Des idées sur la façon de mettre en œuvre un séparateur déplaçable?

Répondre

0

Il s'avère que c'est facile - une fois que vous savez comment.

  1. Définissez l'attribut Designer sur le contrôle à une classe personnalisée qui hérite de ControlDesigner. Remplacez la méthode OnSetCursor de sorte que, lorsque vous êtes sur la zone de séparation, vous afficherez respectivement le curseur HSplit ou VSplit. Per this ticket, assurez-vous pas pour définir le curseur de contrôle (cela provoquera un débordement de pile, plantage, ou tout autre comportement erratique, et certainement pas ce que vous voulez), mais plutôt Cursor.Current.
  2. Remplacez OnMouseDragBegin, OnMouseDragMove et OnMouseDragEnd pour redimensionner les panneaux internes.
Questions connexes