Controle .net : boutons multi-parametrables pour vos applications

Soyez le premier à donner votre avis sur cette source.

Vue 10 900 fois - Téléchargée 1 026 fois

Description

Bonjour à tous,

Voici ma 2ème source. Elle ressemble comme deux gouttes d'eau à ma première qui était de vous offrir un contrôle .Net. La 1ère c'est pour faire des barres de progression, ici des boutons !

Au menu : Boutons simples, apparence 3D, dégradés, hachurés, avec bordures ou non, avec images ou non et plein d'autres paramètres jouant sur le look et les couleurs !

Il y a même la possibilité de définir la taille des images que vous ajouter dans les boutons, ou de faire du "stretch".

Je n'ai pas eu le temps de faire un pdf cette fois, mais comme je l'ai dis, les mêmes fonctions que j'ai développées dans le contrôle pour la barre de progression se retrouvent ici adaptées au bouton.

Ne tenez pas trop compte aussi des commentaires (surtout l'explication de chaque propriété) car j'ai pas eu le temps de relire tout et il y a sûremment des fautes d'orthographes, voir une description qui ne correspond pas (j'ai repris les commentaires de ma première source). Le but de la propriété est de toute façon facile à comprendre rien qu'avec son nom.
Sinon vous pouvez toujours télécharger le PDF de ma première source.

Source / Exemple :


' In The ZIP

Conclusion :


CHAQUE PROPRIETE EST DUPLIQUEE 4X.

Un bouton a 3 états : Normal, souris dessus, bouton cliqué.
J'ai donc défini une propriété pour chaque état : ce qui fait 3x la même propriété
Et la 4ème alors ?
Hé bien la 4ème propriété est la propriété générale.
En définissant cette propriété, vous changez par défaut les 3 autres propriétés en une fois.
En lisant (retournant la valeur de) cette propriété, vous obtenez la valeur de la propriété pour le mode du bouton en cours.

Rien compris ?
Exemple :
La propriété Text défini le texte du bouton. Vous pouvez avoir un texte différent par mode de bouton (normal, souris dessus, cliqué). Si vous voulez définir le même texte quelque soit le mode du bouton, au lieu de faire :

VF_Button1.Text1="Exemple"
VF_Button1.Text2="Exemple"
VF_Button1.Text3="Exemple"

Vous faites :

VF_Button1.Text="Exemple"

Et Text1, Text2, Text3 ont la valeur "Exemple"

Maintenant, choisissons 3 valeurs différentes :

VF_Button1.Text1="Exemple 1"
VF_Button1.Text2="Exemple 2"
VF_Button1.Text3="Exemple 3"

En lecture de VF_Button1.Text, cette propriété retourne , si le mode du bouton en cours est "Clicked" : "Exemple 3"

Ok ?

Evidemment multiplier les propriétés par 4 donne un code .... 4x plus long dans le module de mon composant.
Mais j'ai pensé qu'en faisant ainsi ca vous permettait par contre de gagner bcp de temps et justement du code dans VOTRE projet :
- Avec une seule ligne de code (cette 4ème propriété par défaut), vous définissez les 3 modes du bouton pour des valeurs communes
- Avec une seule ligne de code, vous obtenez la valeur de la propriété du bouton dans le mode dans lequel il se trouve SANS devoir connaître ce mode

Voilà

Bonne prog !

TigerFab

PS : Ah oui, j'ai posté une question dans le forum mais personne n'a trouvé de réponse à me donner :-)
Je la remets ici : Image définit la propriété de l'image d'un bouton, moi j'ai donc ajouté Image1, Image2 et Image3.
Ben quand on choisit une image dans l'explorateur de propriétés (avec les 3 petits points "...") si on veut la retirer de la propriété, il suffit de faire "supprimer" du clavier et ca revient à (Aucun).
Pas mes propriétés personalisées Image1, Image2 et Image3. Une fois que vous avez choisi une image, vous savez plus l'enlever.
Je ne sais pas comment régler ce problème. Si qcq sait, j'apporterai la correction au composant.
Cela vaut pour toutes les propriétés personalisées Image (BackgroundImage, ...)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

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.
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 ...)
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)
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+
Messages postés
2
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
22 août 2004

Bonjour à tous.
Je suis semi débutant ; je n'arrive pas à utiliser ces boutons 3 états dans mon form .

Je peux passer du form VF_button à mon form dans ma solution, - mais je ne vois pas le bouton dans la barre d'outils.
Et le copier coller d'un bouton exemple sur mon form ne marche pas non plus.

Comment faire pour importer ces boutons dans ma solution ? D'avance, merci pour la réponse !
Afficher les 14 commentaires

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.