Additionner des items dans une listview multiselect
cs_Maxime31
Messages postés79Date d'inscriptionsamedi 4 février 2006StatutMembreDernière intervention28 juillet 2008
-
23 mars 2007 à 21:58
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 2018
-
24 mars 2007 à 18:10
Bonjour,
je souhaite utiliser un tableau listview en multiselect pour pouvoir choisir différents items, chacun ayant une valeur, et obtenir à coté du tableau la valeur totale des items selectionnés.
Public Class Form1
Inherits System.Windows.Forms.Form
Friend WithEvents ListView1 As System.Windows.Forms.ListView
Friend WithEvents ColumnHeader1 As System.Windows.Forms.ColumnHeader
Friend WithEvents ColumnHeader2 As System.Windows.Forms.ColumnHeader
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu
#Region " Code généré par le Concepteur Windows Form "
Public Sub New()
MyBase.New()
'Cet appel est requis par le Concepteur Windows Form.
InitializeComponent()
'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
End Sub
'La méthode substituée Dispose du formulaire pour nettoyer la liste des composants.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
MyBase.Dispose(disposing)
End Sub
'REMARQUE : la procédure suivante est requise par le Concepteur Windows Form
'Elle peut être modifiée en utilisant le Concepteur Windows Form.
'Ne la modifiez pas en utilisant l'éditeur de code.
Private Declare Function GetFocus Lib "Coredll" () As Int32
Private Declare Function GetWindowLong Lib "coredll" Alias "GetWindowLongW" (ByVal hwnd As Int32, ByVal nIndex As Int32) As Int32
Private Declare Function SetWindowLong Lib "coredll" Alias "SetWindowLongW" (ByVal hwnd As Int32, ByVal nIndex As Int32, ByVal dwNewLong As Int32) As Int32
Private Sub InitializeComponent()
Dim ListViewItem1 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem
Dim ListViewSubItem1 As System.Windows.Forms.ListViewItem.ListViewSubItem = New System.Windows.Forms.ListViewItem.ListViewSubItem
Dim ListViewItem2 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem
Dim ListViewSubItem2 As System.Windows.Forms.ListViewItem.ListViewSubItem = New System.Windows.Forms.ListViewItem.ListViewSubItem
Dim ListViewItem3 As System.Windows.Forms.ListViewItem = New System.Windows.Forms.ListViewItem
Dim ListViewSubItem3 As System.Windows.Forms.ListViewItem.ListViewSubItem = New System.Windows.Forms.ListViewItem.ListViewSubItem
Me.MainMenu1 = New System.Windows.Forms.MainMenu
Me.ListView1 = New System.Windows.Forms.ListView
Me.ColumnHeader1 = New System.Windows.Forms.ColumnHeader
Me.ColumnHeader2 = New System.Windows.Forms.ColumnHeader
Me.Button1 = New System.Windows.Forms.Button
'
'ListView1
'
Me.ListView1.Columns.Add(Me.ColumnHeader1)
Me.ListView1.Columns.Add(Me.ColumnHeader2)
Me.ListView1.FullRowSelect = True
ListViewSubItem1.Text = "10"
ListViewItem1.SubItems.Add(ListViewSubItem1)
ListViewItem1.Text = "Item1"
ListViewSubItem2.Text = "20"
ListViewItem2.SubItems.Add(ListViewSubItem2)
ListViewItem2.Text = "Item2"
ListViewSubItem3.Text = "10"
ListViewItem3.SubItems.Add(ListViewSubItem3)
ListViewItem3.Text = "Item3"
Me.ListView1.Items.Add(ListViewItem1)
Me.ListView1.Items.Add(ListViewItem2)
Me.ListView1.Items.Add(ListViewItem3)
Me.ListView1.Location = New System.Drawing.Point(0, 16)
Me.ListView1.Size = New System.Drawing.Size(232, 168)
Me.ListView1.View = System.Windows.Forms.View.Details
'
'ColumnHeader1
'
Me.ColumnHeader1.Text = "ITEM"
Me.ColumnHeader1.Width = 175
'
'ColumnHeader2
'
Me.ColumnHeader2.Text = "SCORE"
Me.ColumnHeader2.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
Me.ColumnHeader2.Width = 57
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(0, 240)
Me.Button1.Text = "Quitter"
'
'Form1
'
Me.ClientSize = New System.Drawing.Size(234, 288)
Me.Controls.Add(Me.Button1)
Me.Controls.Add(Me.ListView1)
Me.Menu = Me.MainMenu1
Me.Text = "Form1"
End Sub
#End Region
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Ret As Boolean = ListViewMultiSelect(ListView1)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Close()
End Sub
Public Function ListViewMultiSelect(ByVal wLV As ListView) As Boolean
Dim LVhWnd As Int32
Dim Retval As Int32
wLV.Focus()
If wLV.Focus() Then
LVhWnd = GetFocus()
Retval = GetWindowLong(LVhWnd, GWL_STYLE)
Retval = Retval And (Not LVS_SINGLESEL)
SetWindowLong(LVhWnd, GWL_STYLE, Retval)
Return True
Else
Return False
End If
End Function
End Class
Comment faire pour que les items selectionnés aient leur valeur totale affichée sur cette form ?
troxsa
Messages postés553Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention 2 octobre 20161 24 mars 2007 à 00:01
Salut !
Je comprend rien du tout a ton code !
si tu veux faire une listView en multi-selection pour quoi n'utilise tu pas la propriété MultiSelect a True de ta ListView ?
Puis pour connais les selections de tes Items de ta ListView il faut les lire un par un pour savoir si la selection est activé ou pas, rien de rien compliquer :)
En outre, comme je débute vraiment et que je cherche les infos au fur et a mesure de mes besoins, je ne sais pas comment lire une selection, et ajouter sa valeur a un compteur.
Dans mon idée, je pensais essayer un boutton appelé "total", qui, 'regarde' tous les endroits selectionnés et fait le total. Mais je ne sais pas comment le réaliser.
Si c'est pas compliqué ni long, est ce que tu peux me dire comment 'regarder' un item (en pratique, la valeur numérique dans la colonne de droite pour le cas qui m'interesse, cf capture d'écran http://www.laryngo.com/listview2003.jpg ), et je pense arriver à faire la même chose pour les 30 ou 40 autres items dont j'aurai besoin.
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 24 mars 2007 à 00:18
Bonsoir,
je ne sais rien de rien de VB.Net, c' est pourquoi je me demandais
si ta listview n' a pas, comme en VB6, la propriété CheckBox, qui
corresponderait à une selection ...
Si tel est le cas pourquoi ne pas parcourir ta ListView et incrémenter
une variable par la valeur de ton item si la ligne est cochée ?
Le principe que tu proposes me parait vraiment parfait pour ce dont j'ai besoin. C'est juste que je ne sais pas comment le faire, et donc c'est pour cette raison que je viens chercher un peu d'aide ici.
Vous n’avez pas trouvé la réponse que vous recherchez ?
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 24 mars 2007 à 03:12
je vais essayer de t' expliquer en utilisant un evenement VB6
Au départ
- Tous les Items sont non sélectionnés
- Une variable Total à 0
Dans la procédure
ListView_ItemCheck(ByVal Item As MSComctlLib.ListItem)
'regardes si tu as une semblable ...
'Elle se produit à chaque fois que tu coches ou décoches un ligne.
'Tu testes ensuite sur l' état de cette ligne
If Item.Checked = true Then 'ligne sélectionnée
Total=Total + CInt(ListView.ListItems(Item.Index).ListSubItems(1).Text )
Else 'la ligne est désélectionnée
Total=Total - CInt(ListView.ListItems(Item.Index).ListSubItems(1).Text )
End If
'remarque: Item.Index te renvoie le N° de ligne
'et ListSubItems(1) est la colonne ou est inscrit le score
Ensuite tu transcrit Total dans un Label, par exemple
End Sub
PS: je sais que c' est tard, mais je me suis juste levé pour
un besoin pressant...
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 24 mars 2007 à 07:48
Bonjour, maxime31,
Il me semble que, tout en bas du lien où tu as trouvé ton code, figure une remarque, que tu devrais pouvoir mettre à profit...
La voici, donc :
"Conclusion
Le plus fort dans l'histoire, c'est que vous pouvez sans aucun problème récupérer tous les items sélectionnés en consultant la collection "SelectedIndices" qui reflète à merveille la situation réelle."
cs_fauve
Messages postés661Date d'inscriptionvendredi 2 décembre 2005StatutMembreDernière intervention23 mars 20118 24 mars 2007 à 11:26
Salut,
Je vois que tu veux sélectionner plusieurs items dans ta listview. Le mieux c'est que tu télécharges une version plus récente de visual basic. Il existe en effet un logiciel gratuit par Microsoft : Microsoft Visual Basic 2005 Express Edition. c'est une version légèrement allégé mais qui reste très performant.
D'autant plus qu'avec ce logiciel, pour les listview, tu as la propriété multiselect qui te permet de sélectionner plusieurs items en même temps.
Et voici le code avec le logiciel proposé ci dessus pour récupérer le contenu d'une colonne des items sélectionnés :
For Each item As String In ListView1.SelectedItems.Item(0).Text
MsgBox(item, MsgBoxStyle.OkOnly)
Next
, ----
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 24 mars 2007 à 11:38
Ah... Fauve... tu rachètes un peu là la mauvaise image que je commençais à avoir de VB.Net (que je n'ai pas... et que je n'ai pas non plus l'intention d'acquérir pour plusieurs raisons de l'espèce qui, ajoutées à ses lourdeurs et certaines lenteurs, ne me le rendent pas vraiment sympathique...)
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 24 mars 2007 à 12:06
c' est ça jmfmarques, résistons....et repoussons les attaques incessantes ...
des "fauves"
Mais qu' est ce qu' ils ont tous à vouloir nous convertir à tout prix ?
On est bien nous avec notre VB6 !
chaibat et jmf, je suis passé en dotnet depuis un moment mais je ne lâche pas mon bon vieux vb6 avec qui j'ai appris pleins de choses. D'ailleurs, en ce moment, je m'en sers plus que dotnet. (et oui, il est plus rapide)