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 :

Variable dans un nom d'objet


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2018
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2018
    Messages : 46
    Points : 32
    Points
    32
    Par défaut Variable dans un nom d'objet
    Bonjour,

    Je sollicite votre aide car je n'arrive pas à faire la chose suivante :

    J'ai un ensemble de RectangleShape dans une form appelé Case1, Case2, Case3, ...., Case13

    Ce que je souhaiterais, c'est que sur un évènement mousedown sur un de ces rectangle, je passe dans une fonction qui modifie la position de ce dernier.

    Actuellement, pour chaque rectangle shape je fais la chose suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     Private Sub Case1_Click(sender As Object, e As EventArgs) Handles Case1.MouseDown
     
    If Case1.Location <> InitLoc1 Then
       Case1.Location = InitLoc1
    Else
       Case1.Top = Case1.Location.Y - 90
    End If
     
        End Sub
    (InitLoc1 est initialisé au load de ma form).

    Du coup plutôt que d'écrire 13 fois la même chose, je souhaiterai passer dans une fonction ou sub.
    J'imaginais en gros la chose suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub Case1_Click(sender As Object, e As EventArgs) Handles Case1.MouseDown
       MoveRect(1)
    End Sub
     
    Private Sub MoveRect(NumRect as integer)
    If Case(NumRect).Location <> InitLoc(NumRect) Then
       Case(NumRect).Location = InitLoc(NumRect)
    Else
        Case(NumRect).Top = Case(NumRect).Location.Y - 90
    End If
    End sub
    Bien sûr ça ne fonctionne pas comme ça, mais c'est pour vous donner une idée de ce que j'aimerai faire.

    J'ai également essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For Each c As Control In Me.Controls
         If c.name = "Case" & NumRect
               c.location = ....
     
            Next
    Mais la mon souci est pour récupérer la variable InitLoc en fonction du nom.
    Et en plus ça n'a pas l'air de fonctionner avec des rectangleshape.

    Auriez vous des pistes à me donner ?

    Merci d'avance

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Pour ta variable InitLoc, fais-en un tableau et tu y accèdes ensuite à ta guise :

    Dim InitLoc(13) As Integer ' L'indice 0 ne te servira pas, mais les indices de 1 à 13 correspondront à tes Case de 1 à 13.

    Et puis, pour la procédure événementielle MouseDown, tu peux l'écrire comme ceci :

    Private Sub MesCase_MouseDown(sender As Object, e As EventArgs) Handles Case1.MouseDown, Case2.MouseDown, Case3.MouseDown, et ainsi de suite jusque 13.

    Je devrais en savoir plus sur ta variable initLoc (un exemple d'affectation) pour être plus précis sur la suite, mais ça devrait être ± ce qui suit (là, je vais encore perdre des points .... ...), soit une seule petite procédure pour tous les Case :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Private Sub MesCase_MouseDown(ByVal sender As Object, ByVal e As EventArgs) Handles Case1.MouseDown, Case2.MouseDown, Case3.MouseDown, ' à achever ... 
            Dim Numero As Integer = CType(sender.Name.Substring(4), Integer)
     
            If sender.Location <> InitLoc(Numero) Then
                sender.Location = InitLoc(Numero)
            Else
                sender.Top = sender.Location.Y - 90
            End If
     
        End Sub
    J'espère que ça te donnera des idées ...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Janvier 2018
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2018
    Messages : 46
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Phil Rob Voir le message
    Bonjour,

    Pour ta variable InitLoc, fais-en un tableau et tu y accèdes ensuite à ta guise :

    Dim InitLoc(13) As Integer ' L'indice 0 ne te servira pas, mais les indices de 1 à 13 correspondront à tes Case de 1 à 13.

    Et puis, pour la procédure événementielle MouseDown, tu peux l'écrire comme ceci :

    Private Sub MesCase_MouseDown(sender As Object, e As EventArgs) Handles Case1.MouseDown, Case2.MouseDown, Case3.MouseDown, et ainsi de suite jusque 13.

    Je devrais en savoir plus sur ta variable initLoc (un exemple d'affectation) pour être plus précis sur la suite, mais ça devrait être ± ce qui suit (là, je vais encore perdre des points .... ...), soit une seule petite procédure pour tous les Case :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Private Sub MesCase_MouseDown(ByVal sender As Object, ByVal e As EventArgs) Handles Case1.MouseDown, Case2.MouseDown, Case3.MouseDown, ' à achever ... 
            Dim Numero As Integer = CType(sender.Name.Substring(4), Integer)
     
            If sender.Location <> InitLoc(Numero) Then
                sender.Location = InitLoc(Numero)
            Else
                sender.Top = sender.Location.Y - 90
            End If
     
        End Sub
    J'espère que ça te donnera des idées ...

    Impeccable c'est exactement ça !!
    Merci encore

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/10/2015, 12h00
  2. [XL-2003] Intégrer des variables dans un nom d'objet
    Par Alahsan dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/09/2011, 19h55
  3. Concaténation de variables dans un nom de variables ?
    Par debie1108 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/05/2007, 03h51
  4. Utiliser des variables dans les noms d'objet
    Par Torkan dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 15/03/2007, 23h54
  5. [VBA-E]Utiliser un indice dans un nom d'objet
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/06/2006, 16h42

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