Avec un objet ,c'est possible de faire tout ça ?

cs_dni Messages postés 14 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 17 mars 2007 - 6 mars 2007 à 21:21
VBGenesis Messages postés 292 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 22 février 2009 - 17 mars 2007 à 19:04
Je me suis lancé dernièrement dans la réalisation d’une appli (visible ici), sous VB express 2005, et je dois vous avouer que j’arrive au bout de mes connaissances : il faut savoir que je découvre ce langage en même temps !



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Voilà le contexte : sur un formulaire Form1, j’ai représenté un pupitre de commande (image de fond dans un composant Panel), composé de boutons et de voyants.



 




Naturellement, je souhaiterais interagir avec celui, et pouvoir effectuer les taches suivantes dont certaine sont déjà réalisées :



 





-         au lancement de Form1, création et ajout des boutons sur le Panel (réalisé… mais votre avis compte ! je créé de « vrais boutons » que je rends transparent, et que je superpose à l’image. Si vous connaissez plus simple …),



-         récupérer les événements clic sur ces boutons (réalisé …),



-         je souhaite pouvoir déplacer ce pupitre là ou bon me semble sur Form1 (réalisé, mais ça doit être perfectible …)



-         en fonction du bouton cliqué, je souhaiterais « allumer ou éteindre » les LEDs correspondantes : là ça se corse car j’arrive bien à créer des Picturebox au lancement de Form1, mais impossible de changer leur image de fond (qui représentent le statuts allumé ou éteint, vous l’aurez compris …)



-         enfin, et là ou j’ai le plus besoin de vous : par défaut, ce Form1 contiendra au moins un pupitre, mais je voudrais pouvoir permettre à l’utilisateur d’en ajouter plusieurs… je suppose qu’il faudrait convertir mon actuel composant Panel et son contenu (boutons, pictureboxs, événements sur les boutons …) en objet afin de pouvoir en créer plusieurs instances, mais là, je sèche !!!



 




Voili voilà ….


Donc, si vous avez la solution miracle pour m’aider à réaliser les 2 derniers points, une remarque sur l’existant, bref n’importe quoi qui pourrait m’aider à avancer, je suis preneur !


Merci d’avance !


Denis.

9 réponses

VBGenesis Messages postés 292 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 22 février 2009
7 mars 2007 à 08:55
Salut,
Tu pourrait découper ton image en autant de morceaux qu'il y a de boutons et de leds (je sais que c'est assez lourd) puis de changer les images de leds individuellement (ce qui du coup résout ton problème de clique sur les boutons car c'est directement l'image de ce bouton qui est cliqué.).
Sinon tu peux garder l'image de fond qui affiche des leds éteintes puis superposer des images de leds allumées. Lorsque la led est allumée, l'image superposée est visible.

Pour les multiples pupitres, tu les index, ce sera plus simple.

J'espère avoir été clair (même si je n'en suis pas du tout sur :o)
VBGenesis
0
cs_dni Messages postés 14 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 17 mars 2007
7 mars 2007 à 19:23
Salut VBGenesis,

"
Sinon tu peux garder l'image de fond qui affiche des leds éteintes puis superposer des images de leds allumées. Lorsque la led est allumée, l'image superposée est visible.
"
Effectivement, cette idée est intéressante, je n'y avais pas pensé ...
"
Pour les multiples pupitres, tu les index, ce sera plus simple.
"
Euhh .. là, ben je ne te suis déjà plus ... ! Tu entends quoi par "indexer" ??? Je te rappelle que je suis un super méga débutant !!!
Sinon, pour résoudre ce probleme, j'ai trouvé cette source qui à priori, car je n'ais pas encore eu le temps de l'analyser, semblerais représenter ce que je cherche ...

En attendant, merci pour tes idées !
Denis.
0
cs_dni Messages postés 14 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 17 mars 2007
7 mars 2007 à 19:25
Heuuu ... j'ai oublié le raccourci vers la source ... dsl !
0
VBGenesis Messages postés 292 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 22 février 2009
9 mars 2007 à 08:34
La source que tu as trouvé à l'air de correspondre effectivement. Sinon par indexer je veux dire créer plusieurs objets qui portent le même nom mais qui portent chacun un numéro (indiqué dans la propriété "index" de l'objet). C'est très pratique si tu veux gérer plein d'objets indentiques, ex: tu as 10 images et tu veux toutes les rendres invisibles. Sans indexation, ça donne:
image1.visible = false
image2.visible = false
...

C'est long et lourd. Pour te faciliter la vie, tu index tes images de 0 à 9 (qui donne 10 images) puis tu fais:
For i = 0 to 9
    image(i).visible = false
Next i

Ton index correspond à la valeur du i, et tu le note entre le nom de l'objet et le point, entre parenthèses. Bien entendue, tu peux aussi faire "image(1).visible = false" pour sélectionner un objet particulier.
Si tu as besoin d'avoir une série d'objet identiques, pense aux index, c'est souvent extrêmement pratique.

"Pour la semaine prochaine vous m'apprendrez votre leçon et vous aurez un contrôle"

J'espère que tu as compris!

VBGenesis
0

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

Posez votre question
cs_dni Messages postés 14 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 17 mars 2007
11 mars 2007 à 16:14
Salut,
Effectivement la source que j'avais trouvé précédemment, répond tout à fait à mon besoin ... me reste quand même quelques difficultés dont:

- est il possible de lister tous les usercontrols créés ?
- juste pour mes connaissances : comment sont identifiées les usercontrols créés par le systeme sachant qu'il sont tous des "clones" ???

Sinon, pour ce que tu nomme l'indexation, j'avais déjà trouvé une astuce de ce style:
For i AsInteger = 0 To 19
   Me.Controls("Pic_" & i).BackColor = Color.Transparent
Next

Sinon, je te remercie pour ton coup de main !
Denis.
0
VBGenesis Messages postés 292 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 22 février 2009
13 mars 2007 à 20:44
C'est vrai je n'avais jamais pensé au me.controls pour choisir un objet en fonction d'une var... garde ça en tête ça peut être utile dans le cas où les controles que tu veux indexer ne sont pas du même type (ce que j'avais oublié de te dire: tu ne peux pas indexer une image et un bouton ensembles par ex.)
"juste pour mes connaissances : comment sont identifiées les
usercontrols créés par le systeme sachant qu'il sont tous des "clones"
???"
Que veux-tu dire? Comment récupérer un objet chargé avec un "load", dans le code? dans ce cas il n'y a qu'à connaitre l'index.
VBGenesis
0
cs_dni Messages postés 14 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 17 mars 2007
14 mars 2007 à 00:35
En fait, j'entends par là :

- imaginons un usercontrole, qui est composé entre autres, d'une zone de texte.
- si je fais mettons N fois sur un Formulaire, un truc du style:
Dim tmp = New mon_usercontrole
Me.Controls.Add(tmp)
-> je me retrouve donc avec mon Formulaire contenant  N usercontrole ....

- comment identifier chaque usercontrole ?
- comment puis-je faire pour accéder simplement à la valeur de ladite zone de texte des N usercontrole ?

Désolé si c'est pas très claire, mais tout ce que je sais c'est que je suis bloqué à cause de ce truc ...
0
cs_dni Messages postés 14 Date d'inscription dimanche 6 novembre 2005 Statut Membre Dernière intervention 17 mars 2007
17 mars 2007 à 16:06
Bon, ben , même si je passe des heures à essayer de trouver une solution, c'est pas pour autant que j'ai trouvé !
Suis toujours au point mort, donc toujours à l'écoute d'idées ...
0
VBGenesis Messages postés 292 Date d'inscription samedi 25 février 2006 Statut Membre Dernière intervention 22 février 2009
17 mars 2007 à 19:04
Désolé pour ta question, mais j'avoue que je ne me suis jamais avanturé dans les controls.add et autres new... En fait je me suis personnellement toujours servi d'un load pour charger un objet "à chaud". Voici comment il marche:

(il faut d'abord créer un textbox nommé "text" et indexé à 0 sur la feuille)

'Créé 9 textbox (10 au total)
for tmp = 1 to 9
    'Créé le control avec l'index correspondant au numéro de la boucle
    load text(tmp)
    'Important! sinon le controle ne s'affiche pas
    text(tmp).visible = true
    'Après tu place toutes les propriétés que tu veux, avec un "text(tmp).lapropriétéquetuveuxchanger"
next tmp

Bien sur, tu n'est pas obligé d'utiliser un textbox, mais n'importe quel objet qui peut être indexé

A+!
VBGenesis
0
Rejoignez-nous