2008-12-16 5 views
1

Travailler avec VS.NET 2008, le type de sortie Bibliothèque de classes, .NET Framework 2.0C# UserControl Héritage

Target Je suis venu avec un scénario simplifié de poser cette question.

J'ai un contrôle d'utilisateur Button, c'est un panneau simple avec un seul gros bouton dessus.

Je veux créer un contrôle RedButton qui s'étend Button, et de même, un GreenButton.
par exemple. Class RedButton : Button

Idéalement, quand j'ouvre RedButton « designer s je vois le bouton que j'ai créé en Button et être capable de le modifier, par exemple rendre rouge, ou changer la police, etc.

I » J'ai essayé de le faire une fois, mais quand j'ouvre le concepteur de RedButton, je reçois juste un tas d'erreurs.

Dans ce cas, faire tout ce travail par programmation n'est pas une option pour nous, car dans le cas réel ce serait une douleur.

Quelqu'un pourrait-il nous éclairer à ce sujet? Merci beaucoup.

+0

Je suppose que vous utilisez WinForms? –

+0

Avez-vous répondu à votre question? – David

Répondre

0

La configuration de votre assembly doit-elle être différée? Recherchez l'attribut de signature de délai ainsi que la case à cocher dans les propriétés du projet. J'ai vu retarder la signature cause ce genre de problème avec VS2005 peut-être son encore un problème dans VS2008.

0

J'ai dû faire face à ce problème pendant des années dans une ancienne entreprise. J'ai fait des recherches un peu à l'époque. Je ne pense pas qu'il existe une solution pour cela.

Je ne sais pas combien vous voulez étendre la classe de base dans votre exemple réel, mais les changements que vous avez mentionnés dans votre exemple seraient triviaux. Juste quelque chose comme

btnTheButton.BackGround=Color.Red; 

En réalité, probablement tous les changements que vous devez faire au bouton pourraient être faits en quelques minutes. Il est dommage que ce soit quelques minutes chaque fois que vous avez besoin d'hériter d'un nouveau contrôle, mais je pense que c'est la seule option

1

En vérité, votre exemple devrait fonctionner très bien. Assurez-vous simplement de fournir un constructeur par défaut pour votre classe dérivée. Assurez-vous également que vous n'utilisez pas de contrôles génériques car le concepteur n'aura aucune idée de la façon de créer une instance de celui-ci.

0

Si le contrôle dont vous héritez provient d'une DLL et pas seulement d'une autre classe de la solution, votre concepteur rendra correctement le contrôle hérité. Ma conjecture est que la VS Design View a besoin de la DLL pour dessiner le contrôle. Il peut y avoir d'autres façons de contourner cela.

0

Depuis VS.NET 2008, le concepteur racine est capable de présenter "tas d'erreurs" comme vous l'avez mentionné. En général, le scénario décrit devrait "juste fonctionner".

À quels types d'erreurs faites-vous face?

0

Suivez cet exemple si vous n'êtes pas déjà:

public class RedButton : Button 

puis dans le XAML au lieu de

<UserControl></UserControl> 

Début/fin de votre fichier XAML avec

<Button></Button> 

Notez que il est possible d'hériter de quelque chose dans un autre espace de noms même si vous n'avez pas encore défini l'espace de noms. Exemple:

<radDock:RadPane ...    
     xmlns:radDock="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Docking" 
     ... 
     Title="{Binding Path=StudyTitle}"...