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

Windows Forms Discussion :

ToolsTrip item visible :besoin voyant extralucide


Sujet :

Windows Forms

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut ToolsTrip item visible :besoin voyant extralucide
    Salut
    J'ai pas l'habitude de dire ca mais ici j'ai vraiment un truc de dingue

    Dans mon Form_Load je verifie la proprieté Visible d'un ToolStrip Item.

    A LA FIN du Form_Load, elle est false ! donc je m'attends a ne pas voir l'élément
    Pourtant a l'affichage il est bien la !
    Donc, pour m'assurer, en derniere instruction du Form_Load j'ajoute

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      btnMenuPassword.Visible = false;
    Notons que le watch me disait qu'il est deja false.
    Mais du coup, a l'affichage il n'apparait plus
    Vous allez dire il n'a pas fait attention !
    Donc je commente la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //  btnMenuPassword.Visible = false;
    Maintenant a l'affichage je vois de nouveau l'element

    Vous allez dire il n'avait effectivement pas fait fait attention, son visible etait bien a true,

    Donc pour vous prouver je n'ai pas bu je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      btnMenuPassword.Visible = btnMenuPassword.Visible;
    Et hop disparu !

    Un magicien peut-il comprendre le truc ?
    Merci
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    En regardant le code de la propriété ToolStripItem.Visible avec Reflector, voilà ce qu'on voit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [SRDescription("ToolStripItemVisibleDescr"), SRCategory("CatBehavior"), Localizable(true)]
    public bool Visible
    {
        get
        {
            return (((this.ParentInternal != null) && this.ParentInternal.Visible) && this.Available);
        }
        [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
        set
        {
            this.SetVisibleCore(value);
        }
    }
    (ParentInternal est le ToolStrip qui contient le ToolStripItem)

    Donc on voit que la valeur renvoyée par la propriété Visible dépend du ToolStrip parent, et qu'elle peut renvoyer false si le parent n'est pas visible ou pas défini. Est-ce que tu touches au parent ou à la visibilité du parent après avoir mis Visible = false ? Surveille aussi la propriété Available, qui indique si l'item est visible ou non sans tenir compte du parent

    Je n'ai pas réussi à reproduire le problème, mais je pense que c'est par là qu'il faut chercher...

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Citation Envoyé par TomLev
    Donc on voit que la valeur renvoyée par la propriété Visible dépend du ToolStrip parent, et qu'elle peut renvoyer false si le parent n'est pas visible ou pas défini. Est-ce que tu touches au parent ou à la visibilité du parent après avoir mis Visible = false ? Surveille aussi la propriété Available, qui indique si l'item est visible ou non sans tenir compte du parent
    Merci TomLev,
    Je pensais investiguer de ce coté avant d'aller dormir
    Mais tu t'est couché plus tard

    Je vais essayer de demeller ce noeud ce soir

    Actuellement la seule execution ou mise en commentaire de l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    btnMenuPassword.Visible = btnMenuPassword.Visible;
    Change le comportement
    Donc ce qui se passe a mon avis c'est que mon watch affiche la proprieté d'un parent n'affectant cependant pas l'affichage physique de mon item
    et que l'instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    btnMenuPassword.Visible = btnMenuPassword.Visible;
    a pour effet de redescendre la proprieté du parent sur l'item qui de coup devient reellement invisible.

    (effet pervers de certains accesseurs )
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Bon ben j'ai pigé

    Mon item de Toolstrip est déclaré Visible dans le designer
    Son ParentInternal c'est la form
    Or la form ne devient visible qu'apres le Show

    Donc l'acces a la propriété dans le constructeur ou dans le Load donnera toujours False

    Tandis que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    btnMenuPassword.Visible = btnMenuPassword.Visible;
    Aura pour effet de setter et de fixer pour l'item la proprieté Visible de la form temporairement a False

    A retenir !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question : PopupMenu.Items[ ].visible
    Par JJJJJ dans le forum Débuter
    Réponses: 9
    Dernier message: 03/07/2009, 14h25
  2. Item visible dans une listbox
    Par corbel88 dans le forum GWT et Vaadin
    Réponses: 3
    Dernier message: 10/05/2008, 07h35
  3. Repeater, probleme e.Item.Visible
    Par snopims_ dans le forum ASP.NET
    Réponses: 6
    Dernier message: 04/11/2007, 15h08
  4. Réponses: 2
    Dernier message: 26/07/2006, 12h32
  5. [MFC] CListCtrl : rendre visible un item
    Par eag35 dans le forum MFC
    Réponses: 3
    Dernier message: 17/05/2005, 13h42

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