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 :

Problème d'indexation de PictureBox en VB 2015


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2014
    Messages : 71
    Par défaut Problème d'indexation de PictureBox en VB 2015
    Bonjour à tous.

    J'avais développé un petit programme rigolo ... en VB5 : Représentation animée de la terre, vue d'une position quelconque.
    Pour l'animation, l'astuce était la suivante : "je" dessinais dans une picturebox d'index 0 (propriété visible à 0) pendant que j'affichais le dessin complet de la picturebox à l'index 1 (propriété visible à 1), puis j'inversais les visibilités, et ainsi de suite.

    Ça donnait 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    Sub Animation()
        L0deg = frmParam.txtLatitude.Text
        G0deg = frmParam.txtLongitude.Text
        Bdeg = frmParam.txtRotation.Text
        GRILLEdeg = frmParam.txtGrille.Text
        Echelle = frmParam.txtEchelle.Text
        Transp = frmParam.cochTranspar.Value
     
        While Anim = True
     
            Call Dessin
     
            'Cbangement d'index image et inversion de l'image vue
            Select Case IndexImage
                Case 0
                    IndexImage = 1
                    frmGraph.Image1(1).Visible = False
                    frmGraph.Image1(0).Visible = True
                    frmGraph.Image1(0).Refresh
                Case 1
                    IndexImage = 0
                    frmGraph.Image1(0).Visible = False
                    frmGraph.Image1(1).Visible = True
                    frmGraph.Image1(1).Refresh
            End Select
     
            'Passe le main à WINDOWS pour traitement
            'des évenememts (tels que "Fin Anim." ou "Quitter )
            DoEvents
     
            'Incrémentation de la longitude
            G0deg = G0deg + 0.5
            If G0deg > 180 Then
                G0deg = G0deg - 360
            End If
     
            'Temporisation
            Call Tempo(0.01)
        Wend
    End Sub
    Je voudrais porter ce petit bidule sous VB 2015 (VB5 ne tournant pas sous système x64). Malheureusement, en VB 2015, l'indexation des PictureBox n'existe plus.
    J'ai bien trouvé ceci :
    https://msdn.microsoft.com/fr-fr/lib...=vs.71%29.aspx

    ... mais pour moi, c'est de l'hébreu ! Si quelqu'un pouvait m'aider ...

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 249
    Par défaut
    Les contrôles indexés n'existent plus, par contre il existe sur la form et sur tout contrôle de type Conteneur la propriété Controls qui n'est rien d'autre que la collection des contrôles enfant du conteneur. Et on peut faire des recherches par le nom du contrôle dans cette collection.

    A supposé que tes images s'appellent désormais Image_0 et Image_1, tu pourras y accéder par la commande frmGraph.Controls("Image_"+ index.ToString) avec index valant 0 ou 1.
    Bien attendu c'est pas une simple conversion de code comme cela qu'il faut faire, il va falloir repenser un peu tout le code.
    Mais on peut quand même faire, indirectement, du contrôle indexé avec Dotnet

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    En résumant le texte de la page où mène ton lien, ils te proposent de contourner la difficulté en utilisant l'une ou l'autre de deux propriétés disponible:

    TabIndex qui permet de définir l'ordre dans lequel les contrôles sont parcourus quand on appuie sur la touche TAB du clavier.
    Tag est une propriété de (presque) tous les contrôles qui permet de mettre à peu près n'importe quelle information, à la discrétion du programmeur

    Le code de ta page donne ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub MixedControls_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click, Button2.Click, CheckBox1.Click
       Select Case sender.TabIndex
          Case 0
             MsgBox("Button 1")
          Case 1
             MsgBox("Button 2")
          Case 2
             MsgBox("CheckBox 1")
       End Select
    End Sub
    L'idée de base, c'est de regrouper tes PictureBoxes (ou tout autre contrôles), dans un conteneur particulier sur ta form. L'idée qui me vient à l'esprit c'est un Panel, mais ce n'est pas le seul choix. Si tu recopies le code directement. ton "conteneur" devrait s'appeler MixedControls. En supposant que tu aies 3 pictureboxes (pour suivre l'exemple. Si tu en as juste 2, cela fait quelques lignes de moins) tu mets la propriétée TabIndex de tes pictureboxes en ordre croissant à partir de 0.

    Le "mérite", si on peut dire d'une procédure d'événement est l'objet Sender, qui représente le contrôle qui a déclenché l'événement (Click ou autre). Donc, le Case 0, traite le bouton (ou le PictureBox, c'est exactement le même principe) qui a le TabOrder valant 0. Le Case 1, s'occupe de celui qui a le TabOrder valant 1 etc.

    Je n'ai jamais uttilisé VB5, et j'ai désinstallé VB6 depuis longtemps, mais to code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     'Cbangement d'index image et inversion de l'image vue
            Select Case IndexImage
                Case 0
                    IndexImage = 1
                    frmGraph.Image1(1).Visible = False
                    frmGraph.Image1(0).Visible = True
                    frmGraph.Image1(0).Refresh
                Case 1
                    IndexImage = 0
                    frmGraph.Image1(0).Visible = False
                    frmGraph.Image1(1).Visible = True
                    frmGraph.Image1(1).Refresh
            End Select
    deviendrait grosso-modo celui-ci (En supposant que ta Form s'appelle FormGraph et que tes PictureBoxes s'appellent PictureBox1 et PictureBox2. Sinon, il faut adapter en fonction des noms

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     'Cbangement d'index image et inversion de l'image vue
            Select Case sender.tabIndex
                Case 0
                    frmGraph. PictureBox2.Visible = False
                    frmGraph. PictureBox1.Visible = True
                    frmGraph. PictureBox1.Refresh
                Case 1
                    frmGraph. PictureBox1.Visible = false
                    frmGraph. PictureBox2.Visible = True
                    frmGraph.PictureBox2.Refresh
            End Select
    (j'espère que je ne me suis pas trompé)

    P.S. En jouant au devin, j'ai l'impression que tu commences ta "conversion" à VB.net. Si j'ai raison, je te recommande de jeter un œil, et même sur ce "cadeau" que nous a fait Philippe Lasserre :

    http://plasserre.developpez.com/cours/vb-net/

  4. #4
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2014
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2014
    Messages : 71
    Par défaut
    Merci beaucoup pour vos 2 réponses !

    Je vais travailler la question avant de revenir, comme je l'espère, marquer ce fil [Résolu]


    P.S. En jouant au devin, j'ai l'impression que tu commences ta "conversion" à VB.net. Si j'ai raison, je te recommande de jeter un œil, et même sur ce "cadeau" que nous a fait Philippe Lasserre :

    http://plasserre.developpez.com/cours/vb-net/
    Tu joue très bien au devin, Clément ! Et je vais suivre ton conseil !

Discussions similaires

  1. Optimisation ou problème d'index
    Par Erakis dans le forum SQL Procédural
    Réponses: 35
    Dernier message: 02/06/2006, 19h37
  2. [mysql] Toujours ce problème d'index !!
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 8
    Dernier message: 12/10/2005, 17h05
  3. [perl]Problème tableau indexé
    Par LE NEINDRE dans le forum Langage
    Réponses: 8
    Dernier message: 25/08/2005, 21h24
  4. Problème d'index avec load data file
    Par bruno782 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 09/03/2005, 12h11
  5. Problème d'index
    Par claude dans le forum SQL
    Réponses: 6
    Dernier message: 04/08/2003, 15h55

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