PB hashtable

Résolu
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 - 2 nov. 2005 à 16:55
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 - 4 nov. 2005 à 16:50
J'ai 2 lisBox : List1 et List2



Lorque je clique sur 1 élément de la list1, je génère automatiquement 1 lignes avec 2 textBox



private Hashtable mesTextBox;

TextBox TB11 = new TextBox();

TextBox TB12 = new TextBox();



// textProduit

TB11.Location = new System.Drawing.Point(156, 328);

TB11.Visible = true;

TB11.Size = new System.Drawing.Size(85, 20);

TB11.Name = "textProduit" + cpt.ToString();

mesTextBox.Add("textProduit" + cpt.ToString(), TB11);

this.Controls.Add(TB11);

// textDose

TB12.Location = new System.Drawing.Point(247, 328);

TB12.Visible = true;

TB12.Size = new System.Drawing.Size(85, 20);

TB12.Name = "textDose" + cpt.ToString();

mesTextBox.Add("textDose" + cpt.ToString(), TB12);

this.Controls.Add(TB12);



Mon pb est que lorsque je clique sur List2, je dois déplacer la ligne générée de 25 pixel vers le base



Comment retrouver mes 2 textbox générées et surtout comment leur donner leur nouvelle coordonnée

17 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
2 nov. 2005 à 17:30
Pourtant c'est bien cela.

A condition que cpt.ToString() soit equivalent a la valeur qui avait été entrée comme clé lors de l'ajout.



Exemple pour mesTextBox.Add("textDose" + cpt.ToString(), TB12);
Si tu fais



TextBox tb = (TextBox)mesTextBox["textDose" + cpt.ToString()];



Tu retrouveras TB12


Mx
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 nov. 2005 à 16:38
Si tu fais l'algorithme qui va bien, oui c'est possible.
Un conseil :

Tu te crees un HashTable temporaire.
Tu boucles sur ton HashTable principal et a chaque element trouvé dedans, tu l'ajoutes a ton HashTable temporaire avec une clé que tu incrementes.
Et finalement, tu affectes ton HashTable temporaire a ton HashTable principal.

Et le tour est joué

Mx
3
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
2 nov. 2005 à 17:12
Pour recuperer un TextBox dans ton HashTable,



TextBox tb = (TextBox)mesTextBox["la_clé_correspondant_dans_le_hashtable"];
Et ensuite, tu as juste a redefinir la propriété Location de tes TextBox pour changer leur position


Mx
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
2 nov. 2005 à 17:25
qu'est ce tu entends par la la_clé_correspondant_dans_le_hashtable car je fais

(TextBox)mesTextBox["textDose" + cpt.ToString()]

et ca me renvoie rien du tout
0

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

Posez votre question
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
2 nov. 2005 à 17:34
oki merci, je testerai demain et je te tiens o jus.



Bonne soirée
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
3 nov. 2005 à 16:12
je génére sur chaque ligne un bouton



comment savoir sur lequel g cliqué



voila comment je le déclare:


TB16.Location = new
System.Drawing.Point(580, 328 + ajout);


TB16.Size = new System.Drawing.Size(57, 20);


TB16.Text = "Effacer" + cptLigneProduit.ToString();


TB16.Tag = cptLigneProduit;


TB16.Name = "buttonEffacerLigneProduit" + cptLigneProduit.ToString();


mesButton2.Add("buttonEffacerLigneProduit" + cptLigneProduit, TB16);


TB16.Click += new
System.EventHandler(this.buttonEffacerLigneProduit_Click);


this.Controls.Add(TB16);



Donc tous mes boutons vont ressembler a ca
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
3 nov. 2005 à 17:07
Tu peux savoir sur quel bouton tu as cliqué en utilisant le parametre
sender de ta méthode buttonEffacerLigneProduit_Click. (il faut le
caster en Button au préalable)

Mx
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
3 nov. 2005 à 17:31
en fait comme mes boutons sont numéroté, j'ai fait



string tag = Convert.ToString((sender.ToString()).Substring((sender.ToString()).Length - 1, 1));

int index = Convert.ToInt32(tag);



mais sinon c quoi caster et comment ca marche



Sinon, est ce que je peux renommer mes textbox comme je peux les repositionner sur la fenetre

car je fais :

TextBox tb1 = (TextBox)mesTextBox2["textProduit" + j];

tb1.Location = new System.Drawing.Point(156, 328 + retrait);

tb1.Name = "textProduit" + k.ToString();

mais il déplace mais renomme pas
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
3 nov. 2005 à 17:41
Pour le cast :



Button temp = (Button)sender;

Et temp prendra la valeur du bouton sur lequel tu as cliqué. Tu peux
ensuite l'utiliser et lui changer les propriétés comme n'importe quel
Bouton



Pour ce qui est du renommage normalement y'a pas de souci, ca marche.

Mx
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
4 nov. 2005 à 15:36
oki merci pour le cast, c mieux que ce que j'avais fais.



Mais je modifie les infos de mon bouton et mes textBox mais est -il
possible de redéfinir la clé de chaque élément, cad de la décrémenter
de 1 et ainsi redéfinir le tableau des clés q'il existe

car en faisant:

Button temp = (Button)sender;

int index = Convert.ToInt32(temp.Tag);

int i = index;

int j = index+1;



TextBox tb1 = (TextBox)mesTextBox2["textProduit" + j];

tb1.Location = new System.Drawing.Point(156, 328 + retrait);

tb1.Name = "textProduit" + i.ToString();

Button tb6 = (Button)mesButton2["buttonEffacerLigneProduit" + j];

tb6.Location = new System.Drawing.Point(580, 328 + retrait);

tb6.Name = "buttonEffacerLigneProduit" + i.ToString();

tb6.Text = "Effacer" + i.ToString();

tb6.Tag = i;



j'aimerais retrouver tb1 et tb6 avec comme clé "tb.." + i.ToString() alors qu'ils sont toujours à l'indice du début



En gros je voudrais les retrouver avec l'indice décrémenté de 1
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 nov. 2005 à 15:53
Quand tu change leur clé, il faut que tu les enleve de la hashtable, que tu les remette dedans, et ce sera bon.

Mx
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
4 nov. 2005 à 16:09
si je te suis bien, tu veux que je supprime tous mes hashtable et
que je les recré avec les nouvelles clés. En gros que je recré mon
tableau de clé
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
4 nov. 2005 à 16:10
et en faisant un dispose() de ma dernière clé, est ce qu'elle est supprimé ou juste non accessible
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 nov. 2005 à 16:22
Nonon, ne supprime pas ta HashTable, enleve juste l'element qui correpond a ta clé.
Pour ce faire, utilise la fonction HashTable.Remove(TaClé) ,puis rajoutes-y ton controle avec la nouvelle clé

Mx
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
4 nov. 2005 à 16:33
oki mais voila, mes clés vont de 0 à 10

et je supprime le 2 avec le remove

et ce que je veux c de décaler les clés post 2 donc le 3 deviendrait 2, le 4 ==> 3 etc

donc les refaire pour ne pas avoir de trou



Est ce possible?
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
4 nov. 2005 à 16:46
Ben je te remercie pour toutes ces aides, je pense que sur le hashtable, je vais etre calé

Faut que tu me dises ou est ce qu'on mets les notes des personnes qui répondent



je te tiens au jus
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
4 nov. 2005 à 16:50
Les notes ne se mettent que sur les sources des personnes, pas dans le forum ;)
Bon courage pour la suite

Mx
0
Rejoignez-nous