CONTROLE .NET : BOUTONS MULTI-PARAMETRABLES POUR VOS APPLICATIONS

Signaler
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
-
cs_christoni
Messages postés
140
Date d'inscription
mardi 25 novembre 2003
Statut
Membre
Dernière intervention
1 novembre 2010
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/23990-controle-net-boutons-multi-parametrables-pour-vos-applications

cs_christoni
Messages postés
140
Date d'inscription
mardi 25 novembre 2003
Statut
Membre
Dernière intervention
1 novembre 2010
5
J'arrive tard dans la discussion, mais si ça peut servir à quelqu'un :
Concernant la valeur par défaut de la propriété Image, une petite modif.,ci dessous, de ton code qui semble fonctionner sans passer par Reset.

' Permet de choisir l'image affichée sur le bouton
Private Value_Image() As Image = {Nothing, Nothing, Nothing}
<Description("Détermine l'image affichée sur le bouton"), Category("Remplissage"), _
DefaultValueAttribute(GetType(Image), Nothing)> _
Public Property Image1() As Image
Get
Return Value_Image(0)
End Get
Set(ByVal Value As Image)
Value_Image(0) = Value
If IsNothing(Value_Image(0)) False Then ImageWidth1 Value_Image(0).Width
If IsNothing(Value_Image(0)) False Then ImageHeight1 Value_Image(0).Height
If Value_Mode = BMode.Normal Then
If SetGeneral = False Then
SetSpecific = True
Image = Value
SetSpecific = False
End If
SetButton(Me.CreateGraphics, 0)
End If
End Set
End Property

Private Function ShouldSerializeImage1() As Boolean
Return Not (Value_Image(0) Is Nothing)
End Function



La fonction ShouldSerialize peut aussi être intéressante pour que Vs ne produise pas de code inutilement,à ce sujet voir l'aide de VS :

Méthodes ShouldSerialize et Reset [Visual Basic]
(Guide du développeur .NET Framework)

ShouldSerialize et Reset sont des méthodes facultatives que vous pouvez fournir pour une propriété, si cette dernière ne possède pas de valeur par défaut simple. Si la propriété possède une valeur par défaut simple, vous devez appliquer DefaultValueAttribute et fournir plutôt la valeur par défaut au constructeur de classe d'attributs. Ces deux mécanismes activent les fonctionnalités suivantes dans le concepteur :
• La propriété indique visuellement, dans la fenêtre de propriétés, si sa valeur par défaut a été modifiée.
• L'utilisateur peut cliquer avec le bouton droit sur la propriété et choisir Reset pour restaurer sa valeur par défaut.
• Le concepteur génère un code plus efficace.
Remarque : Appliquez DefaultValueAttribute ou fournissez les méthodes ResetNomPropriété et ShouldSerializeNomPropriété. N'utilisez pas les deux procédures.
La méthode ResetNomPropriété affecte à une propriété sa valeur par défaut, comme illustré dans le fragment de code suivant.

Public Sub ResetMyFont()
MyFont = Nothing
End Sub

Remarque Si une propriété ne dispose pas de méthode Reset, si elle n'est pas marquée avec DefaultValueAttribute et si elle ne possède pas de valeur par défaut fournie dans sa déclaration, son option Réinitialiser est désactivée dans le menu contextuel de la fenêtre Propriétés du concepteur Windows Forms de Microsoft Visual Studio .NET.

Les concepteurs tels que Visual Studio .NET utilisent la méthode ShouldSerializeNomPropriété pour vérifier si une propriété ne possède plus sa valeur par défaut et écrivent du code dans le formulaire uniquement si une propriété a été modifiée, ce qui permet une génération de code plus efficace. Exemple :

'Returns true if the font has changed; otherwise, returns false.
' The designer writes code to the form only if true is returned.
Public Function ShouldSerializeMyFont() As Boolean
Return Not (thefont Is Nothing)
End Function

Vous trouverez ci-dessous un exemple de code complet:

Option Explicit
Option Strict

Imports System
Imports System.Windows.Forms
Imports System.Drawing

Public Class MyControl
Inherits Control

' Declare an instance of the Font class
' and set its default value to Nothing.
Private thefont As Font = Nothing

' The MyFont property.
Public Property MyFont() As Font
' Note that the Font property never
' returns null.
Get
If Not (thefont Is Nothing) Then
Return thefont
End If
If Not (Parent Is Nothing) Then
Return Parent.Font
End If
Return Control.DefaultFont
End Get
Set
thefont = value
End Set
End Property

Public Function ShouldSerializeMyFont() As Boolean
Return Not (thefont Is Nothing)
End Function

Public Sub ResetMyFont()
MyFont = Nothing
End Sub
End Class

Dans ce cas, même si la valeur de la variable privée à laquelle la propriété MyFont accède a une référence Null (Nothing dans Visual Basic), la fenêtre de propriétés n'affiche pas null (Nothing). En effet, elle affiche la propriété Font du parent (Si la référence n'est pas Null (Nothing)) ou la valeur Font par défaut définie dans Control. Par conséquent, la valeur par défaut de MyFont ne peut pas être simplement définie et aucun DefaultValueAttribute ne peut être appliqué à cette propriété. En effet, les méthodes ShouldSerialize et Reset doivent plutôt être implémentées pour la propriété MyFont.
TigerFab
Messages postés
115
Date d'inscription
samedi 15 février 2003
Statut
Membre
Dernière intervention
18 mai 2008

Bonjour,

Alors la je vois pas. Je n'ai pas eu ce type de problème. As-tu essayé mes autres source (le label par ex), ils utilisent aussi une propriété font.

Tu sais me dire où exactement le message apparaît ? je veux dire il montre une ligne de code erronée ou c'est un message système ?

Tu peux tjs m'envoyer une saisie d'écran à tigerfab@teledisnet.be de VStudio quand il plante, car comme ca je sais pas t'en dire plus.

Tu peux en profiter pour m'envoyer les images de ton prg si ca te dit. Malheureusement comme j'ai dit dans ma toute première source, le temps me manque, je fais plus ces codes ci pour m'amuser, bien que parfois je les fignole pour l'utiliser dans mes propre programmes professionels (développements dans la boîte où je travaille, ...) donc te dire si j'aurai du temps pour t'aider, je ne crois pas, je voudrai pas te dire ok, passe moi ton code je vais y ajouter ma sauce et ne rien faire dessus pendant 3 mois ... et puis je suis pas un pro du .net non plus :-) j'apprends encore ce prg ... (ADO.NET, ASP.NET .... y a des tas trucs que je sais tjs pas ...)
ratel3
Messages postés
2
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
22 août 2004

Bonjour TigerFab.

Avec la Dll, je peux mettre un de tes boutons , mais j'obtiens toujours un message d'erreur à la compilation:
"La propriété Font est ReadOnly; Me.VF_Button1.Font = CType(resources.GetObject("VF_Button1.Font"), System.Drawing.Font)

et si je l'enlève, je plante mon script à la compilation suivante.

Au delà de ce pb de boutons, j'ai écris un programme de musique en vb.net et je cherche un pro de la programmation pour le fignoler.

C'est un prg entre Itunes et media player - en fait comme une base de données sur une discothèque, sauf que le prg fait tout ( il faut quand même encoder les cd ou 33T et numériser les pochettes ... et avoir un gros disque dur ce qui n'est plus un pb aujourd'hui) + affichage des paroles + nombreuses autres fonctions non trouvées sur media player, musicmatch ou Itunes ou realplayer (exemple : remplacer tous les morceaux du hd contenant par exemple liberte par liberté AUTOMATIQUEMENT).
Plus d'infos sur demande par email à r.didier@wanadoo.fr ( copies d'écran par ex)
TigerFab
Messages postés
115
Date d'inscription
samedi 15 février 2003
Statut
Membre
Dernière intervention
18 mai 2008

Salut ratel3,

Si j'ai bien compris, il te manque la laison à ma dll dans ton projet.

Pour cela ouvre ton projet puis va dans la "boîtes à outils", choisis par ex l'onglet "Mes contrôles utilisateurs", puis avec le bouton droit, choisis "Ajouter/Supprimer des éléments"
Une boîte de dialogue s'ouvre, dans l'onglet "Composants .NET Framework", choisis "Parcourir" et recherche mon fichier "VF_Button.dll"

Voilà maintenant tu peux ajouter ce type de boutons.

Moi ce que j'ai fait, j'ai créé un dossier "C:\Contrôles .NET" et j'y mets tous les librairies dll que j'utilise.
Ainsi j'ai toujours accès de n'importe quel projet à mes librairies, car le dossier dll ne change pas.
En effet, .NET sauve le dossier où se trouve la dll, donc si tu ouvres mon projet d'un autre dossier où je l'ai créé, il peut arriver qu'il ne trouve plus la dll, il perd la référence. Cela se voit d'ailleurs par un triangle jaune à côté de la dll dans la fenêtre "Explorateur de solutions" du projet, clique sur "Références" pour l'ouvrir et pour chaque référence (dll) tu as son chemin associé dans les "Propriétés".
En mettant toutes les dlls toujours dans le même dossier, plus de problèmes.

Voilà, j'espère que c'était bien la réponse à ta question.
A+