2008-10-24 8 views
2

Je dois redéfinir la méthode Add de la propriété "Controls" de myControl qui est étendue à partir d'un contrôle Panel de Windows. Pour cela, j'ai étendu la classe ControlCollection dans MyControlCollection où j'ai surchargé sa méthode Add. Maintenant, j'ai déclaré une propriété Controls du type MyControlCollection pour masquer la propriété Controls du panneau. Quand j'accède this.Controls.Add (contrôle), il se réfère à la méthode Add overriden. Mais si je traîne et abandonne un contrôle sur myControl, le comportement est de la méthode Add du type de base. Quelqu'un peut-il suggérer la cause et le remède à ce problème? Merci d'avance.Substitution de la propriété Controls d'un panneau en C#

Répondre

1

La cause est que le concepteur appelle Control.Controls plutôt que d'accéder à votre collection séparée. Pour être honnête, votre solution semble être destinée à causer des problèmes, ce que font habituellement les membres qui se cachent.

Qu'essayez-vous de réaliser exactement? Il ne semble pas qu'il y ait un bel événement à raconter dans ControlCollection mais il y a peut-être une façon différente d'aborder le problème.

EDIT: Je viens de voir que Control a un événement ControlAdded - Abonnez-vous à cela soit assez pour vous?

+0

Je dois restreindre l'ajout de contrôles dans myControl en fonction de certaines propriétés. ControlAdded se déclenche après l'ajout d'un nouveau contrôle dans le parent à l'emplacement 0,0. après quoi il déplace le contrôle à la position désirée. Si je supprime ce nouveau contrôle du parent dans EventHandler de ControlAdded, une exception se produit. – Lalit

3

Vous pouvez remplacer la fonction CreateControlCollection et renvoyer une instance de la classe de votre choix, qui hérite de System.Web.UI.ControlCollection. Supprimez la propriété Controls de votre classe, vous ne devriez pas avoir besoin de surcharger ou de masquer l'implémentation d'origine.

+0

Ooh, sympa - je n'étais pas au courant de ça. Je pense que je tenterais toujours de ne pas exiger mon propre ControlCollection en premier lieu si possible, mais il est bon de savoir que cela peut être fait :) –

+0

Il n'y a pas une telle méthode remplaçable pour le contrôle dans Windows. – Lalit

+0

désolé, mon mauvais ... Je suppose que j'ai lu votre message un peu trop vite, et je pensais que vous étiez dans un contexte ASP.NET. Toutefois, dans Windows Forms, vous pouvez faire exactement la même chose en remplaçant la fonction CreateControlsInstance. – baretta

0

En fait, je dois restreindre l'ajout de contrôles dans mon contrôle si certains indicateurs sont vrais. J'ai utilisé cet événement ControlAdded mais il n'a ajouté que des problèmes. ControlAdded se déclenche uniquement après l'ajout de ce contrôle dans le parent à l'emplacement 0, 0. Après avoir levé cet événement, il déplace le contrôle en fonction de la position de la souris au moment de la suppression. Si je supprime ce nouveau contrôle du parent dans l'exception EventHandler de ControlAdded se produit.

Questions connexes