Anglecontrol with designtime code (controldesigner, uitypeeditor, toolboxbitmap...)

Soyez le premier à donner votre avis sur cette source.

Vue 8 575 fois - Téléchargée 654 fois

Description

Cette source est le support d'un tutorial (que j'ai créer) pour la création
de contrôle WinForm intégrant les fonctionnalités du
Concepteur Windows Form.

Cet exemple contient deux Contrôles Permettant d'éditer un angle
à l'aide d'une interface graphique:
- BaseAngleControl: Le Contrôle sans le code du Concepteur Windows
- AngleControl: Le même contrôle que BaseAngleControl
mais avec le support du Concepteur Windows.
- un écran de test permettant de comparer les deux contrôles...

Les principales fonctionnalités du Concepteur Windows Form (DesignTime)
expliquées dans cet exemple sont:
- Description des propriétés pour l'affichage dans une fenêtre de propriétés,
- Designer personnalisé afin d'ajouter le verbe "à propos de ..."
et la propriété "AboutBox" en DesignTime,
- Editeur personnalisé (style DropDown) pour l'édition de la valeur
de l'angle dans une fenêtre de propriétés,
- Editeur personnalisé (Style Modal) pour la propriété affichant
la boite de dialogue "à propos de"
- Attribution d'une image qui s'affichera dans la boite d'outils.

Conclusion :


Le tutorial complet est disponible sur

http://www.osaintouen.fr.st/Tutos/WinControl/tWinControl.htm

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
18
Date d'inscription
lundi 1 décembre 2003
Statut
Membre
Dernière intervention
12 octobre 2004

Salut Dalida,
Merci pour tes compliments sur cette source.

En ce qui concerne les valeurs par défaut,
je préfère les réunir dans la même procédure,
même si dans une classe comme celle-ci il s'agit
du constructeur par défaut.
Ca rends le code plus lisible et ca évite de chercher les valeurs par défaut partout dans le code. (C'est mon avis personnel)

Par contre, en ce qui concerne la sérialisation, je vois pas l'intérêt de ta méthode 'ShouldSerializeCircleBackColor'.

En DotNet, il existe un attribut qui spécifie le type de persistance à utiliser lors de la sérialisation de la propriété d'un composant au moment du design.

Il s'agit de DesignerSerializationVisibilityAttribute.
on peut lui spécifier une de ces 3 valeurs:
- Hidden: Aucune sérialisation.
- Content: Sérialisation des propriétés publics du contenu de la propriété.
- Visible(Valeur par défaut): Sérialisation de la propriété.

Comme la plupart des types de base du DotNet sont sérialisables, les propriétés comme celle de ton exemple
(CircleBackColor) n'ont pas besoin de code
supplémentaire pour leur persistance.

Cet attribut fonctionne aussi avec les types
implémentant iSerializable.
J'ai testé son fonctionnement sur une de mes classes sérialisée en XML par le biais de iSerializable; les données XML de la propriété sont enregistrée dans le fichier de ressource du formulaire et automatiquement restituées par le concepteur Windows Form.

Dans mon exemple, j'utilise cet attribut pour désactiver la propriété Text de AngleControl afin que le concepteur Windows Form n'en tienne pas compte.
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016

ouuuuuups!

j'ai oublie le principale :

Private Function ShouldSerializeCircleBackColor() As Boolean
Return CircleBackColor.Equals(Color.Cornsilk
)
End Function
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016

salut,

bravo pour le code, il est rare de trouver des UserControls aussi aboutis.

comme tu as fait du beau boulot tu auras un dix et une remarque (et oui, a ce niveau la on devient exigeant!).

je conseille de définir des valeurs par defaut, c'est autant de lignes de code economisees a l'initialisation du formulaire parent.
pour les Char, Byte, Short, Integer, Long, Single, Double, Boolean, String ou Object on utilise direct un attribut.

Private _CircleMargin As Int32 = 8
<System.ComponentModel.DefaultValue(CInt(8))> _
Public Property CircleMargin() As Int32
Get
Return MyClass._CircleMargin
End Get
Set(ByVal Value As Int32)
MyClass._CircleMargin = Value
MyBase.Invalidate()
End Set
End Property

pour les autres on utilise une fonction qui indique a VS si il doit serialiser la propriete :

Private _CircleBackColor As Color = Color.Cornsilk
Public Property CircleBackColor() As Color
Get
Return MyClass._CircleBackColor
End Get
Set(ByVal Value As Color)
MyClass._CircleBackColor = Value
MyBase.Invalidate()
End Set
End Property

pour les variables internes je prefere les initialiser au moment de la declaration. c'est pourquoi je place la declaration privee au dessus de la declaration de la propriete pour pouvoir maintenir le code plus facilement.
Messages postés
18
Date d'inscription
lundi 1 décembre 2003
Statut
Membre
Dernière intervention
12 octobre 2004

Merci pour ton avis,
Çà fait toujours plaisir lorsque son travail est apprécié
J'espère que cette source t?aura été utile.
@+
Messages postés
178
Date d'inscription
vendredi 1 novembre 2002
Statut
Membre
Dernière intervention
9 janvier 2010

genial ,que dire de plus.
Cela est different et ca change.
Bon travail
Continue
@+

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.