Problème en VB.NET je suis débutant

mohamed -  
 Mohamed -
Bonjour,

Tout d'abord je tiens à préciser que j'ai longtemps cherché sur le net des explications afin de m'éviter de poster un nouveau topic sur ce site. Je précise aussi que je suis un débutant en VB.Net et donc que je n'ai aucune connaissance pour ce langage.

Mon problème (si on peut appeler ça comme ça) c'est que j'ai un programme à développer (un petit programme qui inclu 2 listbox). Ce que je n'arrive pas à faire, c'est de faire passer des éléments d'une liste à l'autre en appuyant sur le bouton.

Sur mon form j'ai donc :
- 2 listbox (une ou il y a des valeurs et l'autre qui est vide car elle va contenir les valeurs que je selectionnerais depuis la premiere liste)
- 4 boutons de direction : c'est- à-dire un bouton pour passer tous les éléments d'un coup (ce qui entraine le vidage de la premiere liste), un bouton pour faire passer un seul élément à la fois (mais il doit supprimer l'élément dans la première liste), la même chose mais dans le sens inverse (de la liste 2 a la liste 1)
- 1 bouton pour quitter l'application. Ca fait 3 semaines que je suis dessus et le programme est à rendre pour ce vendredi.

S'il vous plait aidez-moi merci.

7 réponses

SkyRhum Messages postés 11 Statut Membre 1
 
Bonjour,
Je ne suis pas un pro du VB.net peut-être que le bouton pour envoyer seulement l'item sélectionné donne ça :


nb_el = type_erreur.ListBox1.ListCount

For i = 0 To nb_el - 1
If ListBox1.Selected(i) = True Then
ListBox2.AddItem ListBox1.List(i)
ListBox1.RemoveItem (i)
End If
Next

Pour passer l'élément sélectionné de la boîte 1 à 2.
1
mohamed
 
Merci pour votre réponse.
Nb_el doit etre déclaré de quel type? et pareil pour type_erreur?
0
SkyRhum Messages postés 11 Statut Membre 1
 
oupsss, pardon type_erreur c'est rien du tout, il faut que tu l'enlève.
nb_el déclare le en integer ou même byte ça suffira ^^
0
mohamed
 
oui mais le problème c'est que j'ai plein de ligne qui sont soulignés. J'ai adapté le code en fonction de mon programme et ca donne ca :

Private Sub BT_PassUn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BT_PassUn.MouseClick
Dim nb_el As Integer
nb_el = LST_ListeMatieres.ListCount

For i = 0 To nb_el - 1
If LST_ListeMatieres.Selected(i) = True Then
LST_ListeVide.AddItem(LST_ListeMatieres.List(i))
LST_ListeMatieres.RemoveItem(i)
End If
Next
End Sub
0
SkyRhum Messages postés 11 Statut Membre 1
 
Je ne vois pas trop le problème à ce que tu ais plusieurs ligne de sélectionnées.
Peut-tu me dire l'erreur renvoyée stp ?
0
mohamed
 
c pas plusieurs ligne selectionnés mais elles sont soulignés. Un exemple pour

LST_ListeMatieres.RemoveItem(i) : l'erreur c'est " 'removeItem' n'est pas un membre de 'System.windows.forms.listbox'"
0
Utilisateur anonyme
 
Bonjour,

Exemple type :

Un bouton qui déplace un élément sélectionné d'une listbox à une autre

Private Sub btn_Vers_Destination_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Vers_Destination.Click

	Dim Position As Int32 = Me.lbx_Sources.SelectedIndex

	Me.lbx_Destination.Items.Add(Me.lbx_Sources.Items(Position))
	Me.lbx_Sources.Items.RemoveAt(Position)

End Sub



Cdt

Lupin
1
Mohamed
 
Bonsoir,

Merci pour ta méthode ça a marché. Il faut maintenant que j'arrive à le faire pour le passage pour toutes les données en un seul coup. J'ai pensé a une boucle mais déjà j'ai une erreur qui est générée.

Encore une fois merci ça me débloque d'un problème auquel je réfléchissais depuis 3 semaines.
0
Utilisateur anonyme
 
re:

Voici un exemple pour les 4 boutons :

Private Sub btn_TousVersDestination_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_TousVersDestination.Click 

 Dim Limite As Int32 = Me.lbx_Sources.Items.Count - 1 

 For Boucle As Int32 = 0 To Limite 
  Me.lbx_Destination.Items.Add(Me.lbx_Sources.Items(Boucle)) 
 Next 

 Me.lbx_Sources.Items.Clear() 

End Sub 

Private Sub btn_TousVerSources_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_TousVerSources.Click 

 Dim Limite As Int32 = Me.lbx_Destination.Items.Count - 1 

 For Boucle As Int32 = 0 To Limite 
  Me.lbx_Sources.Items.Add(Me.lbx_Destination.Items(Boucle)) 
 Next 

 Me.lbx_Destination.Items.Clear() 

End Sub 

Private Sub btn_Vers_Destination_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Vers_Destination.Click 

 If (Me.lbx_Sources.SelectedIndex > -1) Then 
   Dim Position As Int32 = Me.lbx_Sources.SelectedIndex 

  Me.lbx_Destination.Items.Add(Me.lbx_Sources.Items(Position)) 
   Me.lbx_Sources.Items.RemoveAt(Position) 
 End If 

End Sub 

Private Sub btn_Vers_Sources_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Vers_Sources.Click 

 If (Me.lbx_Destination.SelectedIndex > -1) Then 
   Dim Position As Int32 = Me.lbx_Destination.SelectedIndex 

  Me.lbx_Sources.Items.Add(Me.lbx_Destination.Items(Position)) 
   Me.lbx_Destination.Items.RemoveAt(Position) 
 End If 

End Sub 


Cdt

Lupin
1
Mohamed
 
Merci Lupin pour ton aide. Le code fonctionne.

J'aimerais maintenant faire des opérations mais le souci c'est que j'utilise une combobox et une listbox. Je dois multiplier une quantité qui est dans une combobox par un prix qui est dans une listbox.

De plus j'aimerais qu'a chaque fois que je selectionne un element dans la premiere listbox, le prix correspondant à l'élément soit le même dans la 2eme listbox.

Il faut en quelque sorte que sur les 3 listbox que j'ai
- dans la première il y a l'élément à choisir
- dans la deuxième il y a la combinaison element + prix
- dans la 3ème il doit y avoir le prix * la quantité (la quantité étant choisie dans une combobox)

PS : je précise que j'ai toujours les 4 boutons (envoyer tout, envoyer un, retourner un et retourner tout) ils permettent de faire passer le produit de la premiere listbox à la seconde.

Puis il faut au final que le prix total soit affiché dans une textbox lorsqu'on appuie sur un bouton "calculer"

De plus, j'aimerais comprendre l'utilité et le fonctionnement des modules :

Comment les modules sont-ils appelés depuis le form?
Peut-on utiliser des données du form dans les modules (par exemple si je veux utiliser la propriété du bouton calculer)? si oui comment?
0

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

Posez votre question
Utilisateur anonyme
 
Bonjour,

Ton explication n'est pas clair pour moi.

Procédons par étape :

Je cite :

Il faut en quelque sorte que sur les 3 listbox que j'ai
- dans la première il y a l'élément à choisir
- dans la deuxième il y a la combinaison element + prix
- dans la 3ème il doit y avoir le prix * la quantité (la quantité étant choisie dans une combobox)

Fin citation

1.) Tes ListBoxs ont-elles plusieurs colonnes ?
2.) Tes ListBoxs ont-elles le même nombre d'éléments ?

Ou

Est-ce :

Une ListBox pour les éléments
Une ListBox pour les prix
Une ListeBox pour le coût total

???

Si et seulement si, il y a le même nombre d'éléments dans chaque
ListBox, voici le code pour que les 2 ListBoxs s'auto-positionne
l'une par rapport à l'autre.

Private Sub lbx_Sources_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbx_Sources.SelectedIndexChanged

If (Me.lbx_Sources.Items.Count = Me.lbx_Destination.Items.Count) Then
Dim Indice As Int32 = Me.lbx_Sources.SelectedIndex
Me.lbx_Destination.SelectedIndex = Indice
End If

End Sub

Private Sub lbx_Destination_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lbx_Destination.SelectedIndexChanged

If (Me.lbx_Sources.Items.Count = Me.lbx_Destination.Items.Count) Then
Dim Indice As Int32 = Me.lbx_Destination.SelectedIndex
Me.lbx_Sources.SelectedIndex = Indice
End If

End Sub

Pour ce qui est des Modules, je ne peux t'en dire très long, je n'utilise
ceux-ci que très rarement.

Prenons un exemple.

Tu travaille dans un environnement ou tu ne peux modifier les classes
pour les raisons x, y et z (peu importe les raisons).

Tu pourras alors, créer un module d'extension de la classe, pour
ajouter des méthodes ou des propriétés à la classe.

Autre exemple, tu pourrais avoir besoin de méthodes qui sont communes
a plusieurs classes et tu ne peux obtenir ces méthodes par héritage
à cause de contrainte relié à ton environnement, tu pourra alors
utiliser un module.

Il y a bien sur, beaucoup d'autres raisons, mais dans un ordre d'idées
orienté objets, il est préférable de modéliser ton devis, de façon
à utilisé, l'héritage, le polymorphisme et tous les autres concepts
de la programmation POO (Programmation Orienté Objet).

Pour utiliser des méthodes d'un module :

Dim MaValeur = MonModule.MaMethode(MonParametre)


Cdt

Lupin
0
Mohamed
 
Pour le module, apparemment je dois l'utiliser pour stocker des tableaux.

Je m'explique :

Mon projet étant un outil qui permet à une caissière de faire passer les produits en machine et d'en approvisionner par la même occasion. L'outil permet aussi de déterminer le mode de payement (en 3 fois si c'est par CB) mais cette partie là je la traiterais plus tard.

Je dois partir du contexte où les deux listes sont de la même taille mais pas du même type (une liste pour le nom des produits et une pour le prix). Seulement entre temps, j'ajoute une liste qui présentera le produit sélectionné et son prix. Ensuite je dois prendre le prix en paramètre pour faire le calcul Prix * quantité (pour un produit)

A la fin, une textbox me permettra de retourner le prix total des produits sélectionnés en faisant la somme de tous les prix que j'aurais mis dans une listbox

En d'autres termes on a :

Liste_Produit | BT_fleche_direction*| Liste_Combi_Produit_Qte | Liste_Qte*Prix
Tomates | > | Tomate | 1 | 2
Fraise | > | Fraise | 1 | 1.5
Concombre | > | Concombre | 5 | 10
... (1) | ... | ... | ... | ...
____________|_____(2)___________|__________(3)_________|_______(4)_____

Combobox_Qte (3*) BT_Calculer(5*)

BT_Ajouter (1*) Combobox_Mode_de_payement (6) TXT_CoutTotal (5)


Voila brievement ce que je dois avoir sur mon form. Mais des explications doivent se faire

1)La première colonne est une liste qui est de base déjà alimentée mais qu'on peut alimenter justement grâce au bouton Ajouter* qui demande en inputbox le nom du produit et le prix (là j'arrive à ajouter le produit mais le prix je ne l'ai pas encore géré).

2)*La deuxième colonne, ce sont les boutons dont j'ai déjà le code, ils permettent de faire passer un ou plusieurs produit de la première liste a la seconde ou de la seconde à la première (sauf que dans ce dernier cas on doit enlevé la quantité)

3)Dans la troisième colonne, il y a la combinaison de deux choses :
- le nom du produit(sélectionné dans la première listbox),
- la quantité(sélectionnée dans le combobox).
Bien entendu la liste doit comprendre les deux éléments mais elle ne doit pas être divisée en 2 c'est-à-dire qu'on doit bien distinguer le nom du produit et la quantité sélectionnée mais qu'ils doivent tous les deux être présents dans une seule liste.

4) La 4ème colonne correspond au calcul entre la quantité (saisie dans la combobox) et le prix unitaire du produit.

5) c'est grâce à cette dernière ligne qu'on va pouvoir, via le bouton "Calculer" déterminer le prix total qui sera affiché dans un textbox.



6) La combobox pour le moyen de payement présente 3 moyens de payement : Le chèque, l'espèce et la carte bancaire
Si le client paye par carte bancaire, il à la possibilité de payer en mensualité (jusqu'à 3 fois). Dans ces cas là le prix total sera divisé par 3 (s'il choisi ce nombre)

Ce que j'ai déjà réussi à faire :
- L'affichage des produits déjà présents sur le programme
- Le passage d'un produit de la première liste à la seconde (grâce aux flèches de direction)
l'ajout d'un produit dans la première liste (j'arrive à ajouter le nom du produit mais je dois encore travailler sur l'affichage du nom ET du prix dans la 2ème listebox quand je passe le produit dans la 2ème listbox. En faite j'aimerais qu'au passage du produit, le prix soit affiché : le prix sera gardé en mémoire ou bien justement il sera stocké dans un tableau et là je dois utiliser un module)

Ce que je dois faire :
- L'affichage du prix quand je choisi un produit. Il faut que le prix correspondant au produit soit affiché en même temps que le produit dans la même listbox (ou peut-être il est mieux de faire ça dans 2 listbox différentes? une qui affiche le produit et une qui affiche le prix)
- La gestion du moyen de paiement (mais pour l'instant c'est optionnel)
- Le calcul du prix total
- L'affichage du prix par rapport à la quantité saisie en combobox

Je sais ça fait beaucoup de choses à faire mais dès que j'aurais compris comment fonctionne la syntaxe je pense que ça partira tout seul.

Merci à celui ou ceux qui m'aiderons.
0
hiba.mzoughi Messages postés 11 Statut Membre
 
0
mohamed
 
je ne fais pas du c#.net mais du vb.net
0
Utilisateur anonyme
 
Bonjour Mohamed,

Je me suis amusé à créer une petite application
sous VB2008 qui correspond un peu à ce que tu
veux faire.

Bien entendu, j'ai du assumer plusieurs aspects
du projet qui n'étaient pas spécifié.

1.) Utilise tu une base de données pour la
liste des produits ? (Remplacer par un fichier texte)

2.) Est-ce une contrainte que d'utiliser des ListBox ?
(J'ai utilisé des DataGridView)

Voici donc quel explications sur ce projet.

1.) J'ai créé un objet EntiteProduit (Fichier EntiteProduit.vb)
Cet objet (classe) est l'équivalent d'une ligne dans le
DataGridView DGV_Produit.

2.) J'ai créé un objet EntiteCommande (Fichier EntiteCommande.vb)
Cet objet est l'équivalent d'une ligne dans le
DataGridView DGV_Commande.

3.) Je n'ai fait aucune validation ou contrôle dans le projet.

4.) Tu pourras constater, qu'aucune modification n'est pas autorisé
dans les DataGridViews, j'utilise seulement les listes
fortement typé, soit ListeProduit et ListeCommande, pour
gérer les éléments dans les DGV.

5.) Si tu utilise VB2005, tu devras recréer les classes et
faire du coiper/coller pour reproduire le projet, de plus
la fonction Triage devra être refaite car j'utilise une
méthode LinQ (SQL) qui n'est accessible que depuis VB2008.
Donc le bouton ( Ajouter ) ne sera pas fonctionnel.

6.) La fonction TrouveIndiceProduit aurait elle-aussi pu
être faite avec une méthode LinQ, ce qui est beaucoup
plus performant.

7.) Ce n'est qu'un exemple type, et je ne peux te garantir
du temps supplémentaire pour la suite. J'ai fait ce projet
(3 hrs) pour m'amuser et pour parfaire ma maitrise de VB.NET

Tu trouveras le projet ici :
http://membre.oricom.ca/lupin/xfr/commerce.zip

Amuse toi bien :-)

Cdt

Lupin
0
Mohamed
 
Bonjour,

C'est exactement le rendu que je voulais avoir à la fin de mon projet, sauf que moi je ne dois pas utiliser la programmation objet et pour ce qui est des bases de données il faut d'abord que je maîtrise le VB.

Pour répondre à tes 2 premières questions :
1.) Non je n'utilise pas de base de données car je ne sais pas comment faire mais le fait d'en utiliser une n'est pas un problème

2.) pour ce qui est de la contrainte des listbox, je dois les utiliser car c'est pour commencer, après les DataGridView sont quelque chose que je ne connais pas donc je n'y ai pas vraiment songé.

En 3h tu as fais un travail que j'aurais fais en 3 mois voir plus vu ma manière de réfléchir. :)

Tu dois être vraiment casé en la matière pour faire des choses pareils. Merci beaucoup je vais analyser tout ça et te faire part de mes impressions
0