IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[usercontrol] Création d'un contrôle ToolStrip "préconfiguré"


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut [usercontrol] Création d'un contrôle ToolStrip "préconfiguré"
    Hello,

    J'ai créé un toolstrip custom qui est "préconfiguré" dans le sens où il possède déjà des boutons par défaut et certaines des ses propriétés sont initialisées pour correspondre à notre "charte graphique".

    Les boutons par défaut sont accessibles à l'utilisation de contrôle via des propriétés qui les exposent. Il est donc possible de, par exemple, rendre le bouton "Editer" non visible si on n'en a pas besoin.
    Mais si je ferme la fenêtre d'édition du formulaire où ce contrôle custom est utilisé (je parle donc du mode design dans VS), quand je l'ouvre à nouveau, le bouton "Editer" est de nouveau visible (sa propriété est repassé à True).

    Du peu que je connais du fonctionnement du designer de VS, je pense comprendre que c'est car mon contrôle est chaque fois recréer avec un New. Et vu que les boutons par défaut sont ajouter dans le constructeur de mon custom ToolStrip, les modifications sont automatiquement perdues.

    Du coup, je cherche à savoir comment vous feriez ce genre de chose.

    Si je ne suis pas clair, n'hésitez pas à poser des questions.

    Merci d'avance.

    Edit : Je me doute bien que je peux initialiser les propriétés Visibles des boutons que je ne veux pas voir dans le constructeur du formulaire qui utilise ce toolstrip custom mais bon, si ça peut garder ses propres paramètres en mémoire... Des settings au sein du projet du usercontrol ?

    Edit 2 : Je viens de tester avec des settings au sein du usercontrol et cela ne va pas du tout dans le sens où s'il y a plusieurs exemplaires de ce usercontrol sur le formulaire, tous sont affectés XD. J'aurais cru que cela se cantonnerait pourtant à l'instance mais ce n'est apparemment pas le cas...

  2. #2
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Hello Kropernic,

    Citation Envoyé par Kropernic Voir le message
    Edit : Je me doute bien que je peux initialiser les propriétés Visibles des boutons que je ne veux pas voir dans le constructeur du formulaire qui utilise ce toolstrip custom mais bon, si ça peut garder ses propres paramètres en mémoire...
    Pourquoi vouloir garder les propriétés en mémoire? Le comportement risque-t-il de changer? Mettras-tu un jour cet item visible? Moi perso je l'initialiserais directement par code. j'utilise de moins en moins le designer.

    Citation Envoyé par Kropernic Voir le message
    Edit 2 : Je viens de tester avec des settings au sein du usercontrol et cela ne va pas du tout dans le sens où s'il y a plusieurs exemplaires de ce usercontrol sur le formulaire, tous sont affectés XD. J'aurais cru que cela se cantonnerait pourtant à l'instance mais ce n'est apparemment pas le cas...
    Les settings ont effectivement une portée globale. Ils ne conviennent donc pas dans ton cas.

    Tu pourrais imaginer que ton UserControl expose des propriétés du genre EditIsVisible qui agiraient directement sur leurs composants respectifs, de cette manière tu y aurais accès en mode design et je pense qu'elles resteraient, à tester...

    Tu aurais pas un bout de code à passer pour mieux voir et tester (si tu peux...)

  3. #3
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Hello Kropernic,


    Citation Envoyé par Sankasssss Voir le message
    Pourquoi vouloir garder les propriétés en mémoire? Le comportement risque-t-il de changer? Mettras-tu un jour cet item visible? Moi perso je l'initialiserais directement par code. j'utilise de moins en moins le designer.
    Bin pour le moment (mais ce n'est p-e pas la bonne manière de faire), j'ai donc une classe qui hérite de ToolStrip et dans laquelle il y a 5 propriétés de type ToolStripButton qui correspondent aux 5 boutons par défaut. J'ai choisi d'exposer ces boutons via des propriétés un peu par défaut d'une meilleure solution car je ne savais pas trop comment faire et que je me suis dit que cela laissera la possibilité de modifier l'apparence (ou autre) des boutons si nécessaire.
    Mais vu que, en l'état, ça donne juste un bouton sans image et sans texte (sans rien en fait), j'ai mis du code dans le constructeur pour initialiser ses 5 propriétés avec chacune leur bouton respectif bien configuré (une jolie image, un nom adéquat, un texte par défaut, etc.).

    Donc quand j'ajoute mon usercontrol dans un nouveau projet, j'ai bien une toolstrip avec 5 jolis boutons qui s'affiche. Et, via les propriétés de ce contrôle, je peux aller modifier les propriétés de ces 5 boutons.

    Citation Envoyé par Sankasssss Voir le message
    Les settings ont effectivement une portée globale. Ils ne conviennent donc pas dans ton cas.
    C'est ce que je viens de constater oui ^^

    Citation Envoyé par Sankasssss Voir le message
    Tu pourrais imaginer que ton UserControl expose des propriétés du genre EditIsVisible qui agiraient directement sur leurs composants respectifs, de cette manière tu y aurais accès en mode design et je pense qu'elles resteraient, à tester...
    Je vais tester cette solution pour voir. Ca rendra le contrôle moins flexible dans le sens où, si pour une raison quelconque, pour l'un deux je veux mettre une autre image, je ne pourrai plus autrement que par code (je crois)

    Citation Envoyé par Sankasssss Voir le message
    Tu aurais pas un bout de code à passer pour mieux voir et tester (si tu peux...)
    C'est un peu délicat vu que c'est du code fait pour le boulot, c'est la société qui en est propriétaire...

  4. #4
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Sans surprise, avec les propriétés IsXxxxVisible, ça fonctionne bien.

    Mais je pense que ça aurait été sympa de pouvoir accéder au bouton via le designer pour modifier l'une ou l'autre chose (l'image, la police, l'alignement, etc.).

    Je n'abandonne donc pas ^^

  5. #5
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Je me doutais que tu ne pourrais pas mettre le code, on en avait déjà parlé mais avec les indications que tu as données j'ai pu reproduire ce comportement sans soucis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Imports System.ComponentModel
     
    Public Class MyToolStrip
        Inherits ToolStrip
     
        <Category("Items"), _
        Description("First item test.")> _
        Public Property FirstItem As ToolStripItem
     
        Sub New()
            MyBase.New()
            FirstItem = Me.Items.Add("FirstItem")
     
        End Sub
    End Class
    Je n'avais jamais essayé d'ajouter un élément à un control que j'étendais. En général ,quand je fais ça, c'est soit pour redéfinir ou ajouter un comportement à une méthode existante, soit pour ajouter de nouvelles méthodes. Mais le sujet est intéressant.
    Il doit exister une astuce. J'y regarderai à tête reposée demain car là je fatigue tout doucement...

  6. #6
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par Sankasssss Voir le message
    Je me doutais que tu ne pourrais pas mettre le code, on en avait déjà parlé mais avec les indications que tu as données j'ai pu reproduire ce comportement sans soucis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Imports System.ComponentModel
     
    Public Class MyToolStrip
        Inherits ToolStrip
     
        <Category("Items"), _
        Description("First item test.")> _
        Public Property FirstItem As ToolStripItem
     
        Sub New()
            MyBase.New()
            FirstItem = Me.Items.Add("FirstItem")
     
        End Sub
    End Class
    Je n'avais jamais essayé d'ajouter un élément à un control que j'étendais. En général ,quand je fais ça, c'est soit pour redéfinir ou ajouter un comportement à une méthode existante, soit pour ajouter de nouvelles méthodes. Mais le sujet est intéressant.
    Il doit exister une astuce. J'y regarderai à tête reposée demain car là je fatigue tout doucement...
    Merci pour le bout de code Sankasssss ^^. Vu que j'viens d'avoir une promotion ici (3615 mylife), j'fais gaffe de pas faire de connerie comme poster du code que je ne suis pas sensé poster .

    N.B. : Faut dormir la nuit mec

  7. #7
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2015
    Messages : 10
    Par défaut Problème se serialisation ?
    n'est ce pas un problème de sérialisation ?

    Un petit bout de code du usercontrol serait un plus pour pouvoir répondre.

  8. #8
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonjour p.a.t.c.h, bienvenue sur dvp.com

    Tu peux essayer avec le code que j'ai mi ci-dessus qui reproduit ce comportement. Une fois cette class crée, il suffit de régénérer la solution, d'intégrer le composant perso sur une form et d'essayer de modifier FirstItem, par exemple ça propriété Text, par le designer.
    A la première recompilation il perd toutes les modifications effectuées sur le designer.

  9. #9
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2015
    Messages : 10
    Par défaut Sérialisation
    Ok VU avec le code , il s'agit vraisemblablement d'un problème de sérialisation (enregistrement des propriétés de l'Object) des items de ta collection. (de celle héritée de la classe générique toolstrip).

    Tu devrais pouvoir surcharger les propriétés en la déclarant sérialisable et en vérifiant que cette sérialisation soit opérationnelle sur les items (qui sont dans la classe de base en Virtual).

    Regarde de ce coté et tiens moi informé si tu as besoin d'aide.

    Citation Envoyé par Sankasssss Voir le message
    Bonjour p.a.t.c.h, bienvenue sur dvp.com

    Tu peux essayer avec le code que j'ai mi ci-dessus qui reproduit ce comportement. Une fois cette class crée, il suffit de régénérer la solution, d'intégrer le composant perso sur une form et d'essayer de modifier FirstItem, par exemple ça propriété Text, par le designer.
    A la première recompilation il perd toutes les modifications effectuées sur le designer.

  10. #10
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Citation Envoyé par p.a.t.c.h Voir le message
    Ok VU avec le code , il s'agit vraisemblablement d'un problème de sérialisation (enregistrement des propriétés de l'Object) des items de ta collection. (de celle héritée de la classe générique toolstrip).

    Tu devrais pouvoir surcharger les propriétés en la déclarant sérialisable et en vérifiant que cette sérialisation soit opérationnelle sur les items (qui sont dans la classe de base en Virtual).

    Regarde de ce coté et tiens moi informé si tu as besoin d'aide.
    Hello,

    J'ai ajouté l'attribut <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> et ça a l'air de fonctionner pour le peu que j'ai joué avec pour le moment.

    Je n'ai encore jamais vraiment utilisé les attributs. C'est comme cela que tu voyais la chose?

  11. #11
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2015
    Messages : 10
    Par défaut Visibility serialization
    La sérialisation (enregistrement des objets en binaire ou XML) et les attributs (ces espèce de petits signes <...> avant la déclaration en vb net) sont entre autres des fondamentaux des contrôles dans net.
    Ce sont eux qui définissent le comportement/visibilité des ces objets, notamment lorsqu'ils n'ont pas encore d'instance (comme dans le designer de VS), net permet d'accéder à ces éléments par les attributs pour modifier le comportement hérité.

    Le fait de préciser comment et si sérialiser (sauver pendant le design) une propriété <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> peut permettre de résoudre, cependant toolstrip étant un container et items ses contenus, il faut que chaque objet (container et inclus) soit sérialisable ('sauvable').

    Où dans le code d'exemple a tu introduit l'attribut et quelle surcharge a tu fait ?

    Citation Envoyé par Kropernic Voir le message
    Hello,

    J'ai ajouté l'attribut <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> et ça a l'air de fonctionner pour le peu que j'ai joué avec pour le moment.

    Je n'ai encore jamais vraiment utilisé les attributs. C'est comme cela que tu voyais la chose?

Discussions similaires

  1. [C#] Création d'un contrôle avec collection intégrée
    Par nerix dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/06/2006, 10h07
  2. Création dynamique de contrôle Treeview
    Par supernova dans le forum Access
    Réponses: 1
    Dernier message: 06/06/2006, 13h25
  3. Erreur création dynamique de contrôle
    Par thierrybatlle dans le forum Access
    Réponses: 1
    Dernier message: 10/02/2006, 11h00
  4. [MFC] Création manuelle de contrôle bouton
    Par yanisliadon dans le forum MFC
    Réponses: 9
    Dernier message: 21/07/2005, 22h30
  5. Création dynamique de contrôles
    Par qi130 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 17/12/2004, 13h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo