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 :

déclarer variable withevents


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Par défaut déclarer variable withevents
    Bonjour,

    J'essaye décrire un petit programme tant bien que mal, je me débrouille mais cette fois ci j'aurai vraiment besoin d'une aide extérieure.

    J'ai écrit mon premier message hier, et le problème a été résolu en 15min grâce à un membre.

    Mon nouveau problème est celui-ci:

    Mon programme comporte une form dans laquelle se trouve un chart.

    J'ai créé un évènement chart_mousedown pour insérer une shape sur le chart lorsque je clique sur la souris. Les shape insérées s'appellent shape1 et shape2
    Jusque là tout va bien.

    Maintenant, imaginons que l'emplacement des shape ne me convienne pas et que je souhaite les déplacer. J'aimerais pouvoir sélectionner la shape1 ou la shape2 puis la déplacer où je veux sur mon chart.

    Je pense devoir utiliser des évènement

    shape1_mousedown....

    puis

    shape1_mousemove...

    et enfin

    shape1_mouseup....

    Les shape1 et shape2 étant créées une fois le programme lancé, je ne parvient pas à écrire le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     Private Sub shape1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles shape1.MouseDown
    sans qu'il me génère une erreur après le Handles :

    Erreur 1 La clause Handles requiert une variable WithEvents définie dans le type conteneur ou l'un de ses types de base.
    J'espère avoir été clair.

    Merci à vous!

  2. #2
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Par défaut
    En fait, j'ai inséré un bout de code me permettant de sélectionner la shape que je veux bouger.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Public Sub SelectShape(ByVal shape As Microsoft.VisualBasic.PowerPacks.Shape)
            ' Select the control, if it can be selected.
            If shape.CanSelect Then
                shape.Select()
     
            End If
    Mais comment récupérer le shape.select() dans un évènement type MouseDown etc...

    Merci.

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    handles signifie que la méthode précitée sera déclenchée sur les évènements suivant handles (on peut en mettre plusieurs sur la même sub)
    on appelle ca s'abonner à un évènement

    on a le droit d'écrire handles seulement sur les variables déclarée avec withevents

    pour ca il faut remplacer ta ligne qui doit ressembler à ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private shape1 as new shape
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private withevents shape1 as new shape
    quand on veut s'abonner à un évènement pendant l'exécution (sur une variable instancier dans une sub par exemple) il existe addhandler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addhandler instance.event, addressof lasub
    pour retirer un abonnement ajouté avec addhandler il faut remplacer addhandler par removehandler



    pour le déplacement c'est bien le principe, sur mousedown noter quelque part qu'on est en train de déplacer, sur mousemove si on est en train de déplacer on modifie x ou y selon le delta
    et sur mouseup on not qu'on est plus en déplacement
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    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
    EDIT : Devancé par Pol63, toujours aussi rapide

    Bonjour,

    dans votre class, vous devez avoir une variable nommée shape1 de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private shape1 as shape
    il vous faut, comme marqué dans votre message, rajouter WithEvents devant le nom de la variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private WithEvents  shape1 as shape
    Un petit lien pour vous aider à comprendre : FAQ

  5. #5
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Par défaut
    Je vous remercie beaucoup pour ces précieux conseils.
    Je vais mettre ça en application et vous tiens au courant des résultats.

  6. #6
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Par défaut
    Alors j'ai essayé avec un ptit bout de code et ça marche

    Mais ceci a soulevé un autre problème : l'affection de noms à mes shape.

    J'ai l'impression de ne plus y rien comprendre.

    avec l'évènement MouseDown de mon chart1, voici le code pour ajouter une shape à chaque clique de souris :

    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
     
    Public Sub Chart1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Chart1.MouseDown
     
            nclick = nclick + 1 'numéro du click de souris
     
            '-----------------ajout du point sur le graph--------------------
     
     
            Dim ax As Single = e.X
            Dim ay As Single = e.Y
     
            Dim canvas As New ShapeContainer
     
            canvas.Parent = Me.Chart1
     
            theShape.Parent = canvas
            theShape.Name = "theShape" & nclick
            theShape.Size = New System.Drawing.Size(10, 10)
            theShape.BackStyle = BackStyle.Opaque
            theShape.BackColor = Color.Blue
            theShape.BorderColor = Color.Blue
            theShape.Location = New System.Drawing.Point(ax - 5, ay - 5)
    problème, avec withevents je ne peux déclarer que theShape, comment dois-je faire pour créer un évènement mousedown sur le theshape2 ou theShape3...

    Merci

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private withevents theshape1 as shape
    private withevents theshape2 as shape
     
    private sub theshape1_mousedown(...) handles theshape1.mousedown
    end sub
     
    private sub theshape2_mousedown(...) handles theshape2.mousedown
    end sub
    tu peux regrouper tous les mousedown sur un seule sub via

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private sub theshape1_mousedown(...) handles theshape1.mousedown, thespahe2.mousedown
    il faudra alors utiliser sender qui contiendra l'instance de theshape ayant levé l'évènement
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  8. #8
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Mars 2012
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 14
    Par défaut
    Merci pour votre réponse, mais j'avais essayé cette méthode sans entière satisfaction.

    En effet lorsque j'écris le code suivant

    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
     
    Private WithEvents theShape1, theShape2, theShape3, theShape4 As New OvalShape
    .'blabla
    .
    Public Sub Chart1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Chart1.MouseDown
    .'blabla
    .
    .
    dim theShape as new OvalShape
     
    theShape.name=("theShape" & i) 'très important car boucle sur le i
    .
    .'blabla
    .
    end sub
     
    Private Sub theShape1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles theShape1.MouseDown
     
            ' AddHandler theShape.MouseDown, AddressOf theShape_MouseDown
     
            theShape1.BackStyle = BackStyle.Opaque
            theShape1.BackColor = Color.Blue
            theShape1.BorderColor = Color.Blue
        End Sub
    ma shape est bien créée et insérée, mais l'évènement MouseDown ne fonctionne pas dessus.

    En revanche si je force en remplaçant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim theShape as New OvalShape
    theShape.name=("theShape" & i ) 'i =1
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dim theShape1 as New OvalShape
    là l'évènement MouseDown fonctionne , mais lorsque qu'une shape est créée, elle efface et remplace l'ancienne sur le Chart.
    Donc?

    J'espère que vous comprenez mon problème.
    Je pense que la solution est très simple mais je n'ai pas encore assez de recul sur la programmation VB pour résoudre ce problème seul.

    Merci à vous.

Discussions similaires

  1. [WD17] déclarer variable globale et procedure globale dans une fenetre
    Par java_j2ee dans le forum WinDev
    Réponses: 3
    Dernier message: 14/11/2013, 18h05
  2. TOAD ORACLE : Déclarer variable globale
    Par codeste dans le forum PL/SQL
    Réponses: 6
    Dernier message: 24/06/2013, 11h42
  3. [1.x] déclarer variables statiques dans une classe controller
    Par flora806 dans le forum Symfony
    Réponses: 8
    Dernier message: 15/10/2012, 17h26
  4. déclarer variables globales
    Par lanimal37 dans le forum Interfaces Graphiques
    Réponses: 6
    Dernier message: 29/08/2011, 14h18
  5. Déclarer variable sous Visual C++
    Par Tractor dans le forum Débuter
    Réponses: 11
    Dernier message: 20/04/2010, 12h08

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