Utiliser une variable comme instruction

[Résolu]
Signaler
Messages postés
17
Date d'inscription
vendredi 5 décembre 2008
Statut
Membre
Dernière intervention
30 octobre 2010
-
Messages postés
14815
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
3 août 2021
-
Bonjour,
J'aurais voulu savoir si c'était possible en VB.net d'utiliser une variable comme instruction, enfin je c'est trop comment dire cela.
en gros ce que je voudrais faire:
j'utilise directinput pour lire les valeur d'un joystick
j'ai donc

DIM ji as JOYINFOEX
DIM axe_translation as integer

axe_translation = "ji.dwXpos" '(en fait la je pourrai avoir tout les axes ji.dwYpos, ji.dwZpos......)

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
rc = joyGetPosEx(information.joystick_utilisé, ji)
ji.dwSize = Len(ji)
ProgressBar1.Value = information.axe_translation
End Sub
et c'est la que ca plante il essay de rentrer les charactères dans value, normal j'ai mis les guillements mais je sais pas comment faire...

9 réponses

Messages postés
14815
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
3 août 2021
156
Bonjour,

Quel est le contenu de ta structure ?

Je suppose que tous tes champs ont le même type, dans ce cas, tu peux déclarer un tableau éventuellement lié à une énumération.

Ensuite pour ton problème de non conservation des données sélectionnées c'est parce que le formulaire est rechargé, du coup les contrôles aussi.
Sauvegardes ça dans un module, ou si ça doit être conserver entre 2 démarrage de l'appli, dans les paramètres de l'application (propriétés du projet).

Mon site
Messages postés
14815
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
3 août 2021
156
Bonjour,

Ta structure JOYINFOEX, c'est toi qui l'a mis dans ton programme ?
Alors, quel est son contenu ?

Ensuite, si je suggère un tableau, c'est parce quecomme ça tu ne mémorise que l'indexe de ta valeur sans avoir besoin d'un Select Case

En,suite, non, contrairement au C/C++, on ne peut pas mémoriser la référence d'une variable si ce n'est pas un objet (Donc les types de base, enum et structures, n,e sont pas mis en référence, mais en valeur).

Mon site
Messages postés
14815
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
3 août 2021
156
Bonjour,

Il y a déjà un problème de logique dans ton code, comment afficher 3 axes avec un contrôle qui ne permet qu'une dimension ?

ProgressBar1.Value = ji.dwXpos
Ne fonctionne pas ? (à condition de mettre les bornes pour Maximum et Minimum adéquates)

Mon site
Messages postés
17
Date d'inscription
vendredi 5 décembre 2008
Statut
Membre
Dernière intervention
30 octobre 2010

enfait j'ai simplifié le truc, j'ai une fenetre de paramètrage avec une comboBox qui me permet de choisir si on utilise ji.dwXpos ou ji.dwYpos... pour l'axe de translation.
Si je met directement ProgressBar1.Value = ji.dwXpos ca veut dire que pour faire bouger ma barre je devrais agir obligatoirement sur l'axe X or je veut que l'utilisateur puisse choisir.

je bien trouvé une solution mais c'est vraiment barbare car à chaque boucle il est obligé de vérifié à quoi assigné ji.dwXpos ....

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

rc = joyGetPosEx(information.joystick_utilisé, ji)
ji.dwSize = Len(ji)


Select Case ComboBox1.SelectedItem
Case "Axe X"
information.axe_translation = ji.dwXpos
Case "Axe Y"
information.axe_translation = ji.dwYpos
Case "Axe Z"
information.axe_translation = ji.dwZpos
Case "Axe R"
information.axe_translation = ji.dwRpos
Case "Axe U"
information.axe_translation = ji.dwUpos
Case "Axe V"
information.axe_translation = ji.dwVpos
End Select

ProgressBar1.Value = information.axe_translation



Select Case ComboBox2.SelectedItem
Case "Axe X"
information.axe_inclinaison = ji.dwXpos
Case "Axe Y"
information.axe_inclinaison = ji.dwYpos
Case "Axe Z"
information.axe_inclinaison = ji.dwZpos
Case "Axe R"
information.axe_inclinaison = ji.dwRpos
Case "Axe U"
information.axe_inclinaison = ji.dwUpos
Case "Axe V"
information.axe_inclinaison = ji.dwVpos
End Select

ProgressBar2.Value = information.axe_inclinaison



Select Case ComboBox3.SelectedItem
Case "Axe X"
information.axe_rotation = ji.dwXpos
Case "Axe Y"
information.axe_rotation = ji.dwYpos
Case "Axe Z"
information.axe_rotation = ji.dwZpos
Case "Axe R"
information.axe_rotation = ji.dwRpos
Case "Axe U"
information.axe_rotation = ji.dwUpos
Case "Axe V"
information.axe_rotation = ji.dwVpos
End Select

ProgressBar3.Value = information.axe_rotation

End Sub
Messages postés
17
Date d'inscription
vendredi 5 décembre 2008
Statut
Membre
Dernière intervention
30 octobre 2010

En plus cette solution de barbare ne marche meme pas car quand je change de fenêtre ya pas moyen de garder l'information comme par exemple "axe_translation correspond à ji.dwXpos"
Messages postés
17
Date d'inscription
vendredi 5 décembre 2008
Statut
Membre
Dernière intervention
30 octobre 2010

Es-que c'est possible de faire un truc genre:

axe_translation = "X"
progressBar1.value = ji.dw(axe_translation)pos


(Y a pas de fonction EDIT sur ce forum ou je l'ai pas trouvé ?)
Messages postés
17
Date d'inscription
vendredi 5 décembre 2008
Statut
Membre
Dernière intervention
30 octobre 2010

le contenu de ma structure... heuuu moi être débutant ^^

pour le passage d'un formulaire à l'autre ca je connais bien c'est pas trop ca le problème.

Je comprend pas en quoi un tableau pourrait résoudre le problème? Surtout que ji.dwXpos change en premanence.

ce qu'il faut que j'arrive a faire c'est (en version +ou- algorithme):

grace au timer on fait cela en permanence:
ji.dwXpos est envoyé dans ma variable A
ji.dwYpos est envoyé dans ma variable B
ji.dwZpos est envoyé dans ma variable C
...
fin timer

ensuite on a assigné axe_translation à ma variable A (par exemple)

envoyer par le port série la valeur axe_translation (pour cela le logiciel va chercher la valeur dans la variable qu'on lui a assigné,dans cet exemple "ma variable A")


bon je sais je sais pas si c'est plus clair mais bon
Messages postés
17
Date d'inscription
vendredi 5 décembre 2008
Statut
Membre
Dernière intervention
30 octobre 2010

C'est bon ! Effectivement un tableau et ca marche ! Merci bien Nhenry !
Je met le code si ca peut aider quelqu'un qui passera par là:

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

rc = joyGetPosEx(information.joystick_utilisé, ji)
ji.dwSize = Len(ji)
T(0, 0) = ji.dwXpos
T(1, 0) = ji.dwYpos
T(2, 0) = ji.dwZpos
T(3, 0) = ji.dwRpos
T(4, 0) = ji.dwUpos
T(5, 0) = ji.dwVpos

ProgressBar1.Value = T(information.axe_translation, 0)
ProgressBar2.Value = T(information.axe_inclinaison, 0)
ProgressBar3.Value = T(information.axe_rotation, 0)

End Sub

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Select Case ComboBox1.SelectedItem
Case "Axe X"
information.axe_translation = 0
Case "Axe Y"
information.axe_translation = 1
Case "Axe Z"
information.axe_translation = 2
Case "Axe R"
information.axe_translation = 3
Case "Axe U"
information.axe_translation = 4
Case "Axe V"
information.axe_translation = 5
End Select
End Sub

Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged

Select Case ComboBox2.SelectedItem
Case "Axe X"
information.axe_inclinaison = ji.dwXpos
Case "Axe Y"
information.axe_inclinaison = ji.dwYpos
Case "Axe Z"
information.axe_inclinaison = ji.dwZpos
Case "Axe R"
information.axe_inclinaison = ji.dwRpos
Case "Axe U"
information.axe_inclinaison = ji.dwUpos
Case "Axe V"
information.axe_inclinaison = ji.dwVpos
End Select

End Sub

Private Sub ComboBox3_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox3.SelectedIndexChanged

Select Case ComboBox3.SelectedItem
Case "Axe X"
information.axe_rotation = ji.dwXpos
Case "Axe Y"
information.axe_rotation = ji.dwYpos
Case "Axe Z"
information.axe_rotation = ji.dwZpos
Case "Axe R"
information.axe_rotation = ji.dwRpos
Case "Axe U"
information.axe_rotation = ji.dwUpos
Case "Axe V"
information.axe_rotation = ji.dwVpos
End Select

End Sub
Messages postés
14815
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
3 août 2021
156
Bonjour,

Juste une remarque :
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
Select Case ComboBox1.SelectedItem
Case "Axe X"
information.axe_translation = 0
Case "Axe Y"
information.axe_translation = 1
Case "Axe Z"
information.axe_translation = 2
Case "Axe R"
information.axe_translation = 3
Case "Axe U"
information.axe_translation = 4
Case "Axe V"
information.axe_translation = 5
End Select
End Sub


Si tes items sont dans le même ordre que l'index de ton tableau :
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
information.axe_translation = ComboBox1.SelectedIndex
End Sub 


Mon site