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 :

Proprietes inter dependantes dans un usercontrol


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut Proprietes inter dependantes dans un usercontrol
    Bonjour,

    j'essaye de creer un userControl sous VB2008 Express. Le but du jeu de ce control serait de pouvoir afficher un angle em radians sous plusieurs formats differents (radians, degres, grades, degres/minutes, etc...).

    J'ai donc une propriete ValRad pour la valeur en radian a afficher et une propriete Caption pour la valeur a afficher en focntion du format choisi.

    Quand je teste mon controle, si je modifie la propriete ValRad, la prorpiete Caption n'est pas mise a jour tant que je ne clique pas sur le champ "Caption" dans la liste des proprietes et reciproquement si je modifie la valeur de la propriete "Caption", la propriete "ValRad" n'est mise a jour qu'en cliquant dessus.

    Voici le principe du code que j'ai pour le moment :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    Imports System.Math
    PublicClass UserControl1
    Private ValeurRadian AsDouble
    PublicProperty ValRad() AsDouble
    Get
    Return ValeurRadian
    EndGet
    Set(ByVal value AsDouble)
    ValeurRadian = value
    Caption = (value / PI * 180).ToString
    EndSet
    EndProperty
    Private CaptionDisplayed AsString
    PublicProperty Caption() AsString
    Get
    Return CaptionDisplayed
    EndGet
    Set(ByVal value AsString)
    CaptionDisplayed = value
    TextBox1.Text = value
    ValeurRadian = Val(value) / 180 * PI
    EndSet
    EndProperty
    EndClass
    
    Je suis bien conscient aussi qu'il y a un risque de faire une boucle infinie si je ne mets pas un flag quelquepart, le changement d'une propriete entrainant le changement d'une autre, etc... mais pour proceder pas a pas j'aimerais pour le moment au moins que la deuxieme propriete soit mise a jour au changement de la premiere, je verrai ensuite pour eviter le phenomene de cascade

  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 : 43
    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 753
    Points
    39 753
    Par défaut
    Pour éviter l'effet de cascade, tu n'as qu'à changer le champ derrière la propriété, et non la propriété elle-même

  3. #3
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Mais je veux changer la propriete ! A priori (...) ce n'est pas ca qui m'inquiete le plus, je voudrais d'abord mettre la deuxieme propriete a jour de telle maniere que si l'utilisateur en mode creation, change une propriete, la deuxieme soit elle aussi mise a jour dans la liste des proprietes, hors pour le mmoment je dois cliquer sur l'intitule de la deuxieme propriete pour voir sa valeur mise a jour.

  4. #4
    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 : 43
    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 753
    Points
    39 753
    Par défaut
    Ah ok, je vois le problème... a priori le designer ne voit pas le changement de valeur de la propriété, il faudrait le lui signaler... mais je ne sais pas trop comment

  5. #5
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 777
    Points
    1 777
    Par défaut
    Bonjour.

    Je propose de sortir le changement de valeurradian et l'affichage de la property et d'utiliser RefreshProperties(RefreshProperties.All) pour chaque property (déclenche le refresh complet dans le designer) :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Imports System.Math
    Imports System.ComponentModel
    Public Class UserControl1
     
        Private ValeurRadian As Double
     
        <Category("Custom Property"), RefreshProperties(RefreshProperties.All)> _
        Public Property ValRad() As Double
            Get
                Return ValeurRadian
            End Get
            Set(ByVal value As Double)
                ValeurRadian = value
                ChangeCaptionInternal((value / PI * 180).ToString)
            End Set
        End Property
        Private CaptionDisplayed As String
     
        Private Sub ChangeCaptionInternal(ByVal value As String)
            CaptionDisplayed = value
            TextBox1.Text = value
            ValeurRadian = Val(value) / 180 * PI
        End Sub
     
        <Category("Custom Property"), RefreshProperties(RefreshProperties.All)> _
        Public Property Caption() As String
            Get
                Return CaptionDisplayed
            End Get
            Set(ByVal value As String)
                ChangeCaptionInternal(value)
            End Set
        End Property
     
    End Class
    Cdt.

  6. #6
    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 : 43
    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 753
    Points
    39 753
    Par défaut
    Bien vu... je me doutais qu'il devait y avoir un attribut pour ça, mais je le cherchais plutôt dans System.Design que dans System.ComponentModel

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/02/2007, 13h04
  2. Problème d'initialisation d'un booléen dans un UserControl
    Par -Jolan- dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/02/2007, 22h58
  3. [C#] SqlConnection dans un UserControl
    Par rohstev dans le forum ASP.NET
    Réponses: 1
    Dernier message: 08/09/2006, 14h47
  4. Réponses: 5
    Dernier message: 10/07/2006, 09h23
  5. [VB.Net] Comment utiliser CSS dans un UserControl ?
    Par GEFIRO1 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 27/04/2006, 10h27

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