Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CONTROLE .NET : BOUTONS MULTI-PARAMETRABLES POUR VOS APPLICATIONS


Information sur la source

Catégorie :Control Source .NET ( DotNet ) Niveau : Débutant Date de création : 25/06/2004 Date de mise à jour : 25/06/2004 16:54:35 Vu / téléchargé: 7 694 / 779

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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.
 

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, ...)
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de dragon le 25/06/2004 21:50:33

faudrais plus d'états sur tes boutons
normal, survol de la sourie, appuyé, cliquer, enabled, ....

pour le reste, rien a redire, magnifique

signaler à un administrateur
Commentaire de SimonKari le 26/06/2004 07:25:29

Tu peux faire une Sub intitulée "ResetMaPropriété" et mettre dans cette dernière la position de reset de l'objet incriminé. Tel que

Pour la propriété BackGround

Public Sub ResetBackGround
   imgback = nothing
End Sub

signaler à un administrateur
Commentaire de LordBob le 26/06/2004 10:10:49

comme l'autre commentaire sur l'autre source... c'est tres bien, mais comme l'a dit dragon, ca serait bien plus d'état sur les boutons...

signaler à un administrateur
Commentaire de TigerFab le 26/06/2004 10:56:35

Oui c'est vrai, je voulais surtout développer le côté look. Il resterait maintenant à lui donner plus de gestion d'évènements. Mais pour mes propres applications j'avais juste besoin de mes 3 états : normal, survol, cliqué. Je me suis donc arrêté là. Vu le nombre de sources que je mets à disposition :-( vous avez compris que le temps me manque pour finaliser pleinement ces contrôles. Par contre le jour où je les améliore je ferai évidemment l'update ici.

-> SimonKari :  En effet, mais ca oblige à passer par le code pour l'enlever. Or en natif, VS gère l'effacement de l'image de la propriété BackGround uniquement via l'explorateur de propriétés. C'est la que je comprends pas pq pour la définition d'autres propriétés images personalisées, cela ne marche pas. A mon avis il faut passer par des déclarations dans le code (UITypeEditor, ...) mais je ne sais pas comment.

signaler à un administrateur
Commentaire de SimonKari le 27/06/2004 12:03:44

Quelle connerie tu me sort là ! Tu ferais bien d'essayer les conseils qu'on te donne avant de juger ! Parce justement mon grand, si tu utilise la sub que je te dis le système la considère comme tu dis "en natif" !!! GROS MALIN !

signaler à un administrateur
Commentaire de TigerFab le 27/06/2004 12:56:45


Je ne suis pas un gros malin, je ne savais pas qu'une procédure pouvait être exécutée SEULE par "l'interface" de VS sans appel ailleurs dans le code.

Y a bcp de procédures qui fonctionnent ainsi ? Où puis-je trouver de la doc la desssus ?

C'était inutile de t'énerver en plus.

signaler à un administrateur
Commentaire de d1rtyw0rm le 19/08/2004 07:08:43

Ce code à été très bien monté, et à tous ceux qui disent que ce controle manque d'événements (d'états appelé ca comme vous voulez) veuillez noter que le concepteur à TRÈS BIEN FAIT SONT TRAVAIL en fesant hérité sont controle de la classe

System.Windows.Forms.Button

de manière à ce que sont contrôle hérite de tous les événements que le bouton possède. Mais comment faire pour utilisé l'événement Mouse_Move alors ?

AVEC LES HANDLES !!!!!!

Private Sub VF_Button11_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles VF_Button11.MouseMove

        MsgBox("x")

End Sub


Prenez en de la graine les jeunes.

Ce code aurais bien mérité un 8 vu sa simplicité seulement juste a voir les réactions des gens qui ne savent pas comment utilisé les handles d'événement lorsqu'un controle hérite d'une classe je vais mettre une note parfaite au concepteur pour vous avoir tous berné !!!!

;P

-d1rtyw0rm

signaler à un administrateur
Commentaire de SimonKari le 19/08/2004 07:55:04

Je vois pas la rapport avec ce que "moi" j'ai dis ici ? Donc j'aimerais bien savoir qui ce "tous" bernés, regroupent ???

C'est pas très clair, et ca vient relativement tard dans la discussion ! Là je me dis que vous auriez tout aussi bien pu faire une longue et pénible recherche sur le net pour trouver une solution aussi basique ! Tous les mondes sait pourquoi on hérite d'un contrôle existant ! Tous le monde connait les avantages de l'héritage ! Je vois pas du tout où vous voyez une nouveauté dans votre facon de faire ???

Mais je veux bien qu'on m'explique !

signaler à un administrateur
Commentaire de TigerFab le 19/08/2004 12:23:20

Euh rebonjour tout le monde,

Personellement, je reviendrai pas dans la discussion. J'ai fait un contrôle, prenez-le, servez-vous en, modifiez le, faites en tout ce que vous voulez, moi je l'ai mis pour vous faire gagner du temps : j'ai étendu la classe bouton pour que vous puissez avoir un contrôle suffisemment paramétrable pour créer dans vos applications des boutons avec look.

C'est sûr que, comme tout code, y a moyen de rajouter encore plein de trucs, moi il me suffit pour mes besoins comme il est, donc il restera ainsi.

Merci à d1rtyw0rm pour tous les éloges, mais je n'ai rien fait d'extraordinaire que lire mon bouquin, lire d'autres sources d'ici et tester à mon tour...

Allez bonne prog à tous

A+


signaler à un administrateur
Commentaire de ratel3 le 21/08/2004 16:07:26

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 !

signaler à un administrateur
Commentaire de TigerFab le 22/08/2004 12:19:25

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+

signaler à un administrateur
Commentaire de ratel3 le 22/08/2004 20:45:47

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)

signaler à un administrateur
Commentaire de TigerFab le 23/08/2004 19:04:38

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 ...)

signaler à un administrateur
Commentaire de christoni le 15/11/2004 12:34:03

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 :
&#8226; La propriété indique visuellement, dans la fenêtre de propriétés, si sa valeur par défaut a été modifiée.
&#8226; L'utilisateur peut cliquer avec le bouton droit sur la propriété et choisir Reset pour restaurer sa valeur par défaut.
&#8226; 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.

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,296 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.