2 votes

Activation de la surface de conception sur le UserControl personnalisé Winforms

J'ai essayé de créer un contrôle utilisateur personnalisé en C# qui gère les autres contrôles qui lui sont ajoutés. Le contrôle personnalisé se compose de deux panneaux. Ce que j'essaie de réaliser, c'est que si un autre contrôle est glissé vers mon contrôle utilisateur en mode conception (ou ajouté par programmation au moment de l'exécution), je veux que ce contrôle soit placé sur l'un des panneaux.

J'ai essayé de gérer l'événement OnControlAdded mais cela n'a pas fonctionné...

5voto

BillW Points 2303

Markus a écrit : "si un autre contrôle est glissé sur mon contrôle utilisateur en mode conception (ou ajouté par programmation au moment de l'exécution), je veux que ce contrôle soit placé sur l'un des panneaux."

Je vais interpréter ce qui précède comme signifiant que vous veulent le contrôle glissé du Design-Time pour devenir un contrôle des enfants d'un des deux panneaux internes de votre UserControl : si cette interprétation est erronée, veuillez ne pas tenir compte de ce qui suit :)

Par ailleurs, pour éviter toute confusion, vous avez tout à fait raison lorsque vous observez que les panneaux, ou autres contrôles "conteneurs", dans une instance d'un UserControl placée sur un formulaire au moment de la conception, ne "consomment" pas ou n'avalent pas les contrôles glissés comme vous pourriez le penser : en fait, vous ne pouvez même pas les sélectionner individuellement : ils sont ajoutés à la ControlCollection du UserControl.

Heureusement pour vous, dans le cas du glisser-déposer au moment de la conception, il existe un bon exemple de code solide que vous pouvez étudier et utiliser sur CodeProject by Henry Minute : Conception de contrôles imbriqués : cet article vous montrera comment hériter de ParentControlDesigner afin que les contrôles enfants qui sont des conteneurs d'un UserControl au moment de la conception peuvent fonctionner comme des conteneurs de la manière que vous recherchez.

Dans le cas où vous voulez que le consommateur de votre contrôle à l'exécution (programmeur) ... en supposant qu'il n'a pas de source, il interagit avec votre UserControl comme une "boîte noire", capable de "voir" seulement les propriétés, les méthodes, les événements disponibles, etc. que vous avez rendus publics ... pour contrôler où un contrôle ajouté est placé : vous avez une décision à prendre sur la façon dont vous souhaitez que le consommateur accède aux panneaux. Vous pouvez les exposer "directement" en tant qu'objets, via les propriétés publiques du UserControl, ou vous pouvez exposer uniquement une méthode publique pour ajouter des contrôles pour chaque panneau.

0voto

Ian Henry Points 9239

Pourquoi ne pas simplement le faire glisser dans le panneau, ou donner à l'un des panneaux un accesseur public et effectuer tous vos ajouts programmatiques directement dans ce panneau ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X