CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

question visual basic

Midnight_Falcon
Midnight_Falcon
Niveau 7
27 octobre 2005 à 17:44:43

salut le monde j´ai une petit question pratique et ca me ferai gagner beaucoup de temps si vous connaissez la solution

donc voila sous VB jai plusieurs label et command et ceux qui m´interessent s´appellent label1 label2 etc...
mon probleme c´est que je voudrai modifier leurs propriétés en fonction d´une variable

par exemple si ma variable est 1, que le bouton label1 affiche la phrase X, si ma variable est 2, que le bouton label2 affiche la phrase X

voila donc le probleme c´est que je ne connais pas la syntaxe a mettre pour faire ca.
:merci:

dnob700
dnob700
Niveau 10
27 octobre 2005 à 18:23:16

if variable=1 then
label1=X
elseif variable=2 then
label2=X
endif

ou alors je n´ais pas compris ton problème.

On peut même le faire avec un switch :
select case variable
case 1
label1=X
case 2
lebel2=X
end select

Midnight_Falcon
Midnight_Falcon
Niveau 7
27 octobre 2005 à 19:06:31

oui je sais jai deja fai un select case dans mon programme mais le probleme c´est que là jai 9 label, et se taper 20 lignes de code a chaque fois c´est pas tres agreable et ca ralentit l´execution du programme

en fait je voudrai quelque chose du genre

variable = a
label(variable).caption = X

jai essayer cette synthaxe (variable entre parenthese) mais ca ne marche pas

et le truc c´est que c´est pas juste une modification de la propriété caption que je veu, mais une sorte d´etude de cas sur tout mes label, donc au final quelque chose dans le genre :

for variable = 1 to 9
...
label(variable) instruction
...

voila jespere que tu as compris et que tu as une solution :merci:

Midnight_Falcon
Midnight_Falcon
Niveau 7
27 octobre 2005 à 20:48:09

ca y est jai trouvé merci quand meme pour ton aide

pour ceux que ca interesse en fait on peu faire ca en parcourant les collection de label dans mon cas et apliquer l´algorithme a tout ceux de la feuille

dnob700
dnob700
Niveau 10
27 octobre 2005 à 21:15:29

Pas mal, c´est une solution très VB-ienne.

Mais il y a plus simple pour faire ça : c´est de donner un indexe à tes controles label.
Tu prend le premier label (label1) et tu lui donne le nom label et tu mets la propriété index à 0.
Puis tu prend dans l´ordre un par un les autres label et tu leur donne le nom label. Leur propriété index va être mse à jour automatiqueent comme il faut.

et ensuite il ne te reste plus qu´à faire dans le code :
label(variable)=X
Ce qui ne fait qu´une seul ligne, et c´est même exactement la ligne que tu voulais taper.

(Au passage, caption est la propriété par défaut des label (au moins en VB6, je crois que c´est un concept qui n´existe pas en VB.NET) c´est à dire que si tu écris label=truc c´est comme écrire label.caption=truc).

Midnight_Falcon
Midnight_Falcon
Niveau 7
29 octobre 2005 à 17:29:12

merci pour cette astuce et d´ailleurs jai un autre petit probleme avec cette methode

jai utilisé les index pour des command button, et jai envie que lorsque l´on clique dessus, le bouton selectionné devienne invisible. or en faisant ca, l´avantage c´est que tout les bouton auront la meme propriété avec une seule ligne de code, mais je ne peu pas savoir a lavance sur lequel des bouton l´utilisateur va cliquer, donc je ne peu pas mettre d´index !

jai une deuxieme question aussi :
dans mon livre je n´ai pas trouver les commandes qui permettent la creation de controles, parce que je voudrai avoir un nombre de bouton variable. donc je voudrai juste la commande de creation des command button et des lignes, ou bien un lien l´expliquant

merci bcp

dnob700
dnob700
Niveau 10
29 octobre 2005 à 20:55:07

Pour la première question ce n´est vraiment pas dur : tu mets des index à tes boutons puis tu double clique dessus.
Et tu t´apercois que la procédure Click a un nouveau paramètre : index. C´est l´index du boutons sur lequel l´utilisateur a cliqué.

Pour la deuxième question, c´est beaucoup moins simple et je te conseille de ne pas le faire avant d´avoir un certain niveau car il faut bien comprendre comment marche le principe d´objet en VB et tout et tout.

S´il te le faut absolument je peut essayer de te faire un petit exemple, mais la vérité est que moi même je ne sais plus très bien comment le faire.

Midnight_Falcon
Midnight_Falcon
Niveau 7
29 octobre 2005 à 22:28:27

ba pour le second point je ferai d´abord avec un nombre d´objet fixes puis on vera ensuite.

pour le premier point il y a un truc que je doi pas avoir compris :

moi je veu mettre (entre autre) une commande de visibilité, en gros ca :

Private Sub Carre_Click(Index As Integer)
Carre.visible = False
End Sub

mais ca n´existe pas, quand j´ecris Carre. sans index (carje ne sais pas lequel est cliqué) ben je peu mettre comme parametre :
count, item, LBound, UBound

voila donc comment avoir acces a toutes les propriétés sans mettre un index constant ?

merci

dnob700
dnob700
Niveau 10
29 octobre 2005 à 23:39:52

Private Sub Carre_Click(Index As Integer)
Carre.visible = False
End Sub

En temps normal, la procédure serait juste :
Private Sub Carre_Click()
Carre.visible = False
End Sub

Mais là, vu que le groupe de controle possède un index, il a rajoutté un index justement comme paramètre. Lorsque la procédure est appelé, la valeur index est l´index du contrle sur lequel on a cliqué. Donc il suffit de faire :
Private Sub Carre_Click(Index As Integer)
Carre(index).visible = False
End Sub

Midnight_Falcon
Midnight_Falcon
Niveau 7
30 octobre 2005 à 11:20:51

ah yes ca marche nickel merci beaucoup !

Midnight_Falcon
Midnight_Falcon
Niveau 7
02 novembre 2005 à 22:49:29

ah jai une nouvelle question je ne trouve nulle part de solution...
pour une de mes instruction j´aurai besoin d´assigner la propriété à un seul objet de mon groupe de controle, parce que sinon je doit faire une boucle for avec l´index comme variable
et si je met uniquement le nom de mon objet sans index, je ne peu mettre ensuite que .item .count .UBound .LBound et jai essayer je n´ai pas reussi a faire marcher ca

merci

dnob700
dnob700
Niveau 10
02 novembre 2005 à 22:52:38

comme tout le reste, si c´est l´objet d´index i à qui tu veux assigner la propriété tu fait :

carre(i).visible=true

si c´est tes objets carre que tu veux modifier et que tu veux modifier la propriété visible.

Mais je ne vois pas où est ton problème.

Midnight_Falcon
Midnight_Falcon
Niveau 7
03 novembre 2005 à 18:02:15

non en fait je voudrai acceler mon programme en donnant au nom de controle carre une propriete differente

la je faisais :
for i = 1 to x
carre(i).visible = true
next i

et je voudrai que en une seule ligne le groupe de controle change de propriété. normalement c´est possible car c´est dit dans mon livre mais il n´expliquent pas comment faire

dnob700
dnob700
Niveau 10
03 novembre 2005 à 19:11:07

A ma connaissance ça n´est pas possible.

Mais bon, sauf si tu as plusieurs centaines ou milier de d´éléments, je ne pense pas que tu puisse mesurer le temps que ça prend de changer ça, donc ça n´accélérera pas ton programme.

Tout au plus ça serait un peu plus "joli".

Midnight_Falcon
Midnight_Falcon
Niveau 7
03 novembre 2005 à 19:46:24

oki merci bah tant pis alors ^^ , mais je te confirme que ca ralenti le programme (jarrive des fois a 1600 boutons et la ya un tps de latence de 3 secondes a peu pres)

je demandais par contre si il est possible d´assigner une valeur a toutes les cases d´un tableau multimensionnel toujours en evitant de faire une boucle ?
merci :-)

dnob700
dnob700
Niveau 10
03 novembre 2005 à 20:45:54

si la valeur c´est 0 alors oui tu le détruit et tu le reconstruit avec redim (quoi que ça ne doit marcher que pour la dernière dimension, mais bon les tableau multidimension, quand tu peut t´en passer, fait le).

C´est quoi ton programme où tu as 1600 boutons ? l´utilisateur à une chance de s´en sortir vivant ?

Midnight_Falcon
Midnight_Falcon
Niveau 7
03 novembre 2005 à 21:41:43

pour mon tableau en fait si j´ai bien compris je peu faire :

Redim Tableau(0,0)
Redim Tableau(x,y)

je vais essayer ca et la j´aurais la valeur 0 sur chaque case normalement. par contre si jai bien compris impossible d´assigner une quelconque valeur sans boucle. ca devrai bien m´aider quand meme merci

:lol: t´inquiete normalement on survit tant qu´on perd pas. j´essaie de faire comme premier programme un demineur, et j´essaie les grandes dimensions pour voir si je dois optimiser mon code comme l´utilisateur peut choisir n´importe quelle valeur.

voila merci pour le tuyau encore une fois :-d

dnob700
dnob700
Niveau 10
04 novembre 2005 à 16:04:04

une "meilleure" solution serait d´utiliser un controle picturebox dans lequel tu dessine tes cases (tu as le dessin d´une case que tu recopie partout) et lorsque l´utilisateur clique dessus, tu détermine la case sous le clique et tu remplace l´image par l´image d´une case enfoncé.

Ca te permet de n´avoir qu´un seul controle pour tout ton programme. C´est plus rapide, et beaucoup plus propre. En plus, c´est à peine plus compliqué.

A toi de voir comment tu fait de toutes manière.

Kilyn_
Kilyn_
Niveau 10
05 novembre 2005 à 14:46:08

Pour l´histoire des boutons que tu veux mettre à une seule propriété, j´ai peit être une idée malgré l´oubli du code VB. j´espère que dnob700 ppirrait m´aider. :-d N´est-il pas possible de faire :

Dim bouton as Object

For each bouton in.nom_feuille.button
bouton.visible = true
Next

Je suis désolée si la syntaxe n´est pas exacte car cela fait un certain temps que je n´ai plus pratiqué ce langage. Il va falloir que j´y mette. Tiens d´ailleurs ça me donne envie de passer à VB.NET. Quoi de mieux que de rajouter une corde à son arc ? :-)

dnob700
dnob700
Niveau 10
05 novembre 2005 à 15:34:36

Oui, effectivement, ça doit marcher.
C´est plus propre vu qu´il n´y a pas besoin de toucher au code si on change le nombre de bouton( entre in et nom_feuille il faut un espace plutot qu´un ´.´ je pense, mais ça, ceux qui suivent auront corriger d´eux même).

Par contre, d´un point de vue vitesse, on ne doit pas y gagner, mais ce n´est pas le plus important.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment