2010-04-26 8 views
1

Je dois ajouter du code à la méthode EndInit d'un contrôle PictureBox, mais malheureusement c'est privé et, d'après ce que je peux rassembler, je ne peux pas l'ombre et appeler la base - du moins pas VB.NET.Quelles sont les conditions requises pour que le code ISupportInitialize soit sérialisé dans InitializeComponent? .NET

Ce que je peux faire est d'ajouter une propriété factice à ma classe de boîte d'image. Le type de la propriété dummy est simplement une classe qui implémente simplement ISupportInitialize. Cependant, cela ne fonctionne pas, j'ai besoin de la classe dummy pour hériter de Control.

Est-ce le minimum requis?

+0

Êtes-vous en train de créer un contrôle qui hérite de 'PictureBox'? – SLaks

Répondre

1

Comme vous le pensiez, vous devez créer un proeprty qui contient une classe fictive implémentant ISupportInitialize.

Ensuite, exposer la propriété comme ceci:

[EditorBrowsable(EditorBrowsableState.Never)] //Hide from IntelliSense (outside your solution) 
[Browsable(false)] //Hide from Properties window 
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
public MyDummyClass Initializer { get; private set; } 

Spécification DesignerSerializationVisibility.Content le Designer pour définir les proeprties de l'objet au lieu de l'objet lui-même, et sera également l'amener à appeler BeginInit/EndInit.

De toute évidence, vous devez instancier la classe dans votre constructeur.

+0

J'ai ajouté l'attribut DesignerSerializationVisibility.Content mais j'ai encore besoin de ma classe factice pour dériver du contrôle. Je vais essayer le code dans C# et voir si j'obtiens un résultat différent. – Jules

+0

Je l'ai testé en C# et la classe fictive devait hériter de Control. Cela semble un peu lourd mais il est possible que je n'aie pas besoin d'hériter de Control mais d'implémenter l'une des nombreuses interfaces qui contrôlent les outils. – Jules

+0

Je suis à peu près sûr que tout ce dont vous avez besoin est "Component". – SLaks

Questions connexes