2010-02-24 8 views
1

J'ai un contrôle utilisateur WinForms Host avec un éditeur d'interface utilisateur personnalisé. Grâce à cet éditeur, un contrôle enfant (Child) peut être ajouté à Host.Concepteur WinForms: Ajouter un contrôle et le rendre visible pour le concepteur

(L'éditeur de l'interface utilisateur crée et met ChildChild.Parent = Host)

enfant est assurée par une classe d'aide Holder<Child>, qui est définie comme la propriété de Tag par exemple, un ListViewItem.

Le code respectif - en partie au moins - est ajouté au formulaire: Holder est créé et défini comme Tag, ce qui est suffisant pour être créé lors de l'exécution.

Toutefois, Child n'est pas visible par le concepteur: il est affiché, mais il ne peut pas être sélectionné et il n'apparaît pas dans la liste déroulante avec les contrôles du formulaire parent.

Je voudrais:

  • voir le contrôle Child dans le concepteur, afin que je puisse modifier les propriétés
  • obtenir notifié si le contrôle est supprimé

Est-ce possible?


[modifier] Merci à tous pour vos commentaires. J'ai décidé d'ignorer le concepteur - j'espérais rassembler quelque chose rapidement, mais apparemment, cela nécessite plus de planification que je ne devrais me permettre de le faire maintenant.

+0

Le concepteur UserControl par défaut en fait déjà beaucoup. Comment vous l'avez cassé est tout à fait clair. –

+0

Si vous tentez d'ajouter des contrôles dynamiquement, puis les modifier via le concepteur, cela est impossible, si ce n'est pas ce que vous vouliez dire, veuillez clearifier – caesay

+0

@sniperX: Le contrôle TAB permet d'ajouter des pages, puis de les modifier via le concepteur - donc je suppose que c'est possible. – peterchen

Répondre

1

Utilisez this.Controls.Add(/*Instance of the child*/); sur la classe hôte. Ensuite, pour la notification, ajoutez un gestionnaire d'événements pour l'événement ControlRemoved de l'hôte (this.ControlRemoved += new ControlEventHandler(Host_ControlRemoved);).

1

Je ne peux pas dire que je comprends parfaitement ce que vous essayez de faire.

Si vous avez affaire au problème de la façon dont un contrôle "enfant" d'un contrôle UserControl placé sur un formulaire au moment du design peut être utilisé comme un conteneur sur lequel vous pouvez faire glisser et déposer d'autres contrôles du Boîte à outils: cet article de CodeProject par Henry Minute peut être utile: Designing Nested Controls. Par exemple: vous avez un UserControl avec un Panel à l'intérieur: une instance de UserControl est placée sur un Form: dans la vue Design-time du Formulaire: vous voulez pouvoir glisser-déposer des contrôles sur le Panel dans le UserControl et faites-les devenir des contrôles enfants du Panel: l'article de Henry vous montrera comment faire cela.

Ce de Microsoft: How to make a UserControl object acts as a control container design-time by using Visual C#

Peut-être pourrait aussi être utile, bien qu'il semble que vous avez déjà accompli cette étape.

+0

@Designing Contrôles imbriqués - ajoutés à ma "feuille de triche de concepteur" – peterchen

Questions connexes