Utiliser une variable comme instruction

Résolu
CPPTSI Messages postés 17 Date d'inscription vendredi 5 décembre 2008 Statut Membre Dernière intervention 30 octobre 2010 - 29 oct. 2010 à 22:19
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 - 30 oct. 2010 à 17:55
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

NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
29 oct. 2010 à 23:26
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
3
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
30 oct. 2010 à 03:05
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
3
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
29 oct. 2010 à 22:53
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
0
CPPTSI Messages postés 17 Date d'inscription vendredi 5 décembre 2008 Statut Membre Dernière intervention 30 octobre 2010
29 oct. 2010 à 23:02
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
CPPTSI Messages postés 17 Date d'inscription vendredi 5 décembre 2008 Statut Membre Dernière intervention 30 octobre 2010
29 oct. 2010 à 23:08
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"
0
CPPTSI Messages postés 17 Date d'inscription vendredi 5 décembre 2008 Statut Membre Dernière intervention 30 octobre 2010
29 oct. 2010 à 23:16
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é ?)
0
CPPTSI Messages postés 17 Date d'inscription vendredi 5 décembre 2008 Statut Membre Dernière intervention 30 octobre 2010
29 oct. 2010 à 23:44
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
0
CPPTSI Messages postés 17 Date d'inscription vendredi 5 décembre 2008 Statut Membre Dernière intervention 30 octobre 2010
30 oct. 2010 à 12:53
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
0
NHenry Messages postés 15000 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 27 septembre 2022 158
30 oct. 2010 à 17:55
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
0