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.
![]()
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
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 ![]()
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
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).
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
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.
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
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
ah yes ca marche nickel merci beaucoup !
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
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.
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
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".
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 ![]()
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 ?
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
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 ![]()
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.
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.
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 ? ![]()
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.