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 :

[VB.NET]Test sur changement de valeur d'une variable


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 23
    Points : 17
    Points
    17
    Par défaut [VB.NET]Test sur changement de valeur d'une variable
    Bonjour,

    puis-je créer dans mon WindowsForm une fonction qui s'execute automatiquement lorsq'une de mes variables partagées change de valeur?

    Merci

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Points : 83
    Points
    83
    Par défaut
    il y a moyen oui, tout est possible en programmation

    si j'ai bien compris tu aurai une variable et quand celle-ci change de valeur tu veux qu'une fonction se lance automatiquement.

    faudrait une précision du comment déjà tu fais pour changer ta variable si c'est sur un evenement click d'un bouton, une frappe sur une touche du clavier etc...

    sur l'evenement click d'un bouton tu compares ta variable partagé si elle est égale à celle qui existait si elle est différente tu lances ta fonction.

    ça ferai un truc dans le genre

    private sub Bouton_click(byval ............. eventargs) handles Bouton.click

    if maVariablePartagé = ManouvelleVariable then
    MaFonction()
    end if
    end sub

    voilà si j'ai bien compris

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Points : 291
    Points
    291
    Par défaut
    Mon idée serait de passer par une propriété pour changer la valeur de la variable.

    Ta propriété peux donc tester si la valeur change et

    ce test est transparent pour tous les objets modifiant cette valeur.

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Points : 616
    Points
    616
    Par défaut
    Je comprends un truc... si ta variable change ... c'est qu'il y a eu un "evenement".
    Pourquoi ne pas utiliser cet évênement pour lancer ta méthode ?
    Je pense volontiers à penser aux choses auxquelles je pense que les autres ne penseront pas

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    'lutation
    Connaissais vous les accesseurs get/set ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private int _maVar
    public int maVariablePartage
    {
    get()
    { return _maVar;}
    set()
    {
    _maVar = value;
    MaFonction();// tu peu meme la mettre avant l'affectation de ta valeur ;)
    }
    }
    1 || 1 = 1
    1 && 1 = 1
    1 * 1 = 1
    Bon après tout, peut-être que Van Damme avait raison :
    1 + 1 = 1 // harmonie parfaite

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    481
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 481
    Points : 616
    Points
    616
    Par défaut
    pourquoi faire un accesseur si juste l'appel de la fonction suffit ??
    Merci de m'espliquer
    Je pense volontiers à penser aux choses auxquelles je pense que les autres ne penseront pas

  7. #7
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Elle est globale a toute l'application.
    Donc exit l'accesseur en lecture et/ou écriture.
    ah bon !!??

    La variable ne change peut être pas qu'à un seul endroit...
    Cela pourrait devenir lourd d'appeler la fonction à chaque fois que tu modifies ta variable.

    Par contre, je rejoins l'idée d'ekinox17 tu peux créer un accesseur dans un module.

    Oup !! Je viens de relire ton post et je crois avoir cerner le problème...

    En fait, tu veux provoquer un évenement dans ta Form, lorsque la variable partagée a été modifiée. (elle peut très bien être modifée ailleurs que dans ta form, si j'ai bien compris.)

    En y reflechissant, je ne pense pas que cela soit possible de cette façon.
    Si tu as la possibilté de la faire, ma solution serait de stocker une propriété et non une variable dans une classe à instance unique ou tu pourrais provoquer un évenement (récupérable dans ta form si tu récupère l'instance)

    Exemple :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    Public Class MaClasseSINGLETON
     
        Private Shared m_clsInstance As MaClasseSINGLETON ' L'instance unique
        Private mStr_MaVariable As Integer = 0 ' La variable partagée
        ' Evenement lorsque la variable change
        Public Event MaVariableChange As EventHandler
     
        '*** Méthode Standard qui renvoie l'instance unique 
        '*** de la classe (SINGLETON)
        Public Shared Function GetInstance() As MaClasseSINGLETON
     
            If m_clsInstance Is Nothing Then _
                m_clsInstance = New MaClasseSINGLETON
     
            Return m_clsInstance
        End Function
     
        '*** Accesseur ma variable
        Public Property MaVariable() As Integer
            Get
                Return mStr_MaVariable
            End Get
            Set(ByVal Value As Integer)
                If mStr_MaVariable <> Value Then
                    mStr_MaVariable = Value
                    RaiseEvent MaVariableChange(Me, New EventArgs)
                End If
            End Set
        End Property
    End Class
     
    Public Class MonForm
        Inherits System.Windows.Forms.Form
     
        '*** Récupération instance MaClasseSINGLETON
        Private WithEvents clsMaClasseSINGLETON As MaClasseSINGLETON = _
                                MaClasseSINGLETON.GetInstance
     
        '*** Evenement provoqué lorsque la variable partagé est modifiée
        Private Sub clsMaClasseSINGLETON_MaVariableChange( _
                        ByVal sender As Object, _
                        ByVal e As System.EventArgs _
                        ) Handles clsMaClasseSINGLETON.MaVariableChange
     
            MsgBox("Ma variable a changée !")
        End Sub
     
     
        '*** Click sur bouton1, on affiche MonForm2
        Private Sub Button1_Click( _
                        ByVal sender As System.Object, _
                        ByVal e As System.EventArgs _
                        ) Handles Button1.Click
     
            Dim frmMonForm2 As MonForm2
     
            Try
                frmMonForm2 = New MonForm2
                frmMonForm2.Show()
     
            Catch ex As Exception
                ' Gestion des exceptions
                MsgBox(ex.ToString)
            End Try
        End Sub
    End Class
     
    Public Class MonForm2
        Inherits System.Windows.Forms.Form
     
        '*** Click sur bouton de la form2 qui modifie 
        'la valeur de la variable partagée
        Private Sub Button1_Click( _
                        ByVal sender As System.Object, _
                        ByVal e As System.EventArgs _
                        ) Handles Button1.Click
     
            MaClasseSINGLETON.GetInstance.MaVariable = 1
        End Sub
    End Class
    Tu ajoutes un bouton sur MonForm et sur MonForm2.

  8. #8
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Bon il faut juste expliquer d'avantage ce que tu entends dire par variable partagée, mais globalement c'est possible de le faire avec les delegates en utilisant comme precedement un accesseur.

    Code C# : 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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
      public delegate void ValueChangedDelegate(object o, ValueChangedEventArgs e);
     
    public class ValueChangedEventArgs
        {
            public string AttributeName;
            public object AttributeValue;
     
            public ValueChangedEventArgs(string valueName, object newValue)
            {
                AttributeName = valueName;
                AttributeValue = newValue;
            }
        } 
    public class Notifier
        {
     
    private event ValueChangedDelegate ValueChangedEvent;
     
            protected void Notify(string propertyName, object propertyValue)
            {
                if (ValueChangedEvent != null)
                    ValueChangedEvent(this, new ValueChangedEventArgs(propertyName, propertyValue));
            }
     
     
            public Notifier(ValueChangedDelegate theDelegate)
                {
                ValueChangedEvent += theDelegate;
                }
        }
     
     public class MyClass : Notifier
        {
            private int x; // x remplace ta variable partagée
     
            public MyClass(ValueChangedDelegate theDelegate)
                : base(theDelegate)
                {}
     
            public int X
            {
                get { return x; }
                set
                {
                    x= value;
                    Notify("X", value);
                }
            }
        }

    et la tu as une methode de ta windows form qui s'inscrit a l'evenement

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private void XChangeValeur(object o, ValueChangedEventArgs e)
            {
                Console.WriteLine("X a changé, nouvelle valeur : {0}", e.AttributeValue); 
            }
     
            MyClass myClass=new MyClass( new ValueChangedDelegate(XChangeValeur));

    Voila j'espere que ca va t'aider à resoudre ton probleme.
    Mehdi Feki : Modérateur .Net

  9. #9
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    excuses-moi, mais il y a cette erreur à la compilation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    The name 'ValueChangedEvent' does not exist in the current context
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  10. #10
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Effectivement, code corrigé
    Mehdi Feki : Modérateur .Net

Discussions similaires

  1. [Toutes versions] Alterner les couleurs sur changement de valeur dans une colonne
    Par Invité dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/01/2015, 09h20
  2. Evénement sur le changement de valeur d'une variable
    Par kimcharlene dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 17/08/2012, 20h56
  3. Evenement sur changement d0une valeur d'une variable
    Par Destiny dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/04/2008, 09h28
  4. Réponses: 1
    Dernier message: 29/09/2005, 11h10
  5. Intercepter le changement de valeur d'une variable
    Par Captain_JS dans le forum C++Builder
    Réponses: 5
    Dernier message: 07/01/2005, 08h04

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