[C#]Supprimer un item d'un listView

poppins
[C#]Supprimer un item d'un listView

Salut à tous,

Comment supprimer un item d'un listView?

(Est ce que je peux utiliser la touche suppr pour le faire?)

fredericmazue

Salut poppins,

C'est bien toi qui voulais mettre deux ListView en correspondance ?
J'aurais bien aimé savoir si ma réponse t'avait aidé finalement.
Poser des question c'est bien, mais un petit mot à celui qui t'a répondu c'est bien aussi :wink:

TroXsA

Bonjour

j'ai la reponse mais en vb.net :)

donc la solution du comment j'ai fait c'est comment recupere t-on l'item selectionner en integer pour utiliser la commande Remove de l'objet listview
si tu veux je te donne le code en vb.net et tu vois ce que tu peux faire avec !

a bientot

poppins

Merci TroXsA
Tu as très bien compris le problème

J'aimerais bien que tu m'envoie le code en vb.net

Merci d'avance,

Poppins

fredericmazue

Pour supprimer un item de rang n:

listBox1.Items.Remove(listBox1.Items[n]);

et pour supprimer l'item sélectionné

listBox1.Items.Remove(listBox1.Items[Box1.SelectedIndex]);
[/]
TroXsA

Moi avec vb 2003 javais comme ça ! :)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ListView1.Items.Add("Item1")
        ListView1.Items.Add("Item2")
        ListView1.Items.Add("Item3")
        ListView1.Items.Add("Item4")
    End Sub

    Private Sub SupprToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SupprToolStripMenuItem.Click
        For i As Integer = 0 To ListView1.Items.Count - 1
            If ListView1.Items.Item(i).Selected = True Then
                ListView1.Items.Item(i).Remove()
                Return
            End If
        Next
    End Sub

c'est pas mieux mais sa fonctionnais bien !

Cordialement[/code]

poppins

Merci bien...
Mais est ce que je ne pourrais pas tout de même utiliser la touche suppr?

Quel est son code?

TroXsA

fredericmazue wrote:
Pour supprimer un item de rang n:

listBox1.Items.Remove(listBox1.Items[n]);

et pour supprimer l'item sélectionné

listBox1.Items.Remove(listBox1.Items[Box1.SelectedIndex]);

Raté, le sujet est une ListView :) et pas une ListBox :)

[/]
TroXsA

poppins wrote:
Merci bien...
Mais est ce que je ne pourrais pas tout de même utiliser la touche suppr?

Quel est son code?

Oui bien sur a condition de mettre la proprieté de ta form KeyPreview = True
puis mettre le code dans l'evenement KeyDown

    Private Sub DelItemListView()
        ListView1.Focus()
        Try
            For i As Integer = 0 To ListView1.Items.Count - 1
                If ListView1.Items.Item(i).Selected = True Then
                    ListView1.Items.Item(i).Remove()
                    Return
                End If
            Next
        Catch ex As Exception
            Exit Try
        End Try

    End Sub
    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        If e.KeyValue = Keys.Delete Then
            DelItemListView()
        End If

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ListView1.Items.Add("Item1")
        ListView1.Items.Add("Item2")
        ListView1.Items.Add("Item3")
        ListView1.Items.Add("Item4")
    End Sub

    Private Sub SupprToolStripMenuItem_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SupprToolStripMenuItem.Click
        DelItemListView()
    End Sub
fredericmazue

Quote:
Raté, le sujet est une ListView et pas une ListBox

Argh je deviens vieux. Depuis le début, je me suis obstiné à penser listbox :oops:

cela dit le principe est le même et les codes semblables (ouf)

poppins

Merci beaucoup...

TroXsA

fredericmazue wrote:
Quote:
Raté, le sujet est une ListView et pas une ListBox

Argh je deviens vieux. Depuis le début, je me suis obstiné à penser listbox :oops:

cela dit le principe est le même et les codes semblables (ouf)

;) ben c'est pas grave
le principe c'est d'ouvrir le debat ouvert et de trouver des solutions ensemble c'est le but d'un forum :)

Cordialement

poppins

Désolé, mais l'expression e.KeyValue = Keys.Delete me génère une erreur.....

TroXsA

Salut

Pourrais tu me dire quelle est cette erreur ?
car cher moi sa fonctionne tres bien ! en vb.net et non en C#

@+

poppins

Il me génère les erreurs suivantes :

Impossible de convertir implicitement le type 'int' en 'bool'

La propriété ou l'indexeur 'System.Windows.Forms.KeyEventArgs.KeyValue' ne peut pas être assigné -- il est en lecture seule

Impossible de convertir implicitement le type 'System.Windows.Forms.Keys' en 'int'

TroXsA

Il y a une evidence pour moi qu'en Vb.net et C# c'est pas la meme chose :)

Il faut alors voir ce qu'il te retourne en valeur e.KeyValue et recuperer cette valeur normalement il devrais te retourné "46" et faire

e.KeyValue = 46 alors (then)

ce que je veux dire c'est que tu replace Keys.Delete par 46 et sa devrais etre bon ! :)

poppins

ça marche merci !!!!
mais il n'accepte pas l'instruction
listView1.Items.Remove(listView1.Items[View1.SelectedIndex]);

Il dit que 'System.Windows.Forms.ListView' ne contient pas de définition pour 'SelectedIndex'
.....

[/]
TroXsA

re bonjour ! :)

Il me semble que je n'est pas parler de ça "SelectedIndex"
regarde bien le code que j'ai donné
tu dois trouvé la correspondance en C#

Quote:
Private Sub DelItemListView()
ListView1.Focus()
Try
For i As Integer = 0 To ListView1.Items.Count - 1
If ListView1.Items.Item(i).Selected = True Then
ListView1.Items.Item(i).Remove()
Return
End If
Next
Catch ex As Exception
Exit Try
End Try

End Sub

    Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown 
        If e.KeyValue = Keys.Delete Then 
            DelItemListView() 
        End If 

    End Sub 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
        ListView1.Items.Add("Item1") 
        ListView1.Items.Add("Item2") 
        ListView1.Items.Add("Item3") 
        ListView1.Items.Add("Item4") 
    End Sub 

    Private Sub SupprToolStripMenuItem_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SupprToolStripMenuItem.Click 
        DelItemListView() 
    End Sub

Vu que je connais pas le C# je peux pas t'aider plus :(

A bientot

fredericmazue

Bonjour,

Quote:

Impossible de convertir implicitement le type 'int' en 'bool'

La propriété ou l'indexeur 'System.Windows.Forms.KeyEventArgs.KeyValue' ne peut pas être assigné -- il est en lecture seule

Il se pourrait que tu ais écrit par inadvertance un = là où tu aurais du écrire un == (dans ton if)

Quand tu rencontres un problème de ce genre, c'est une bonne idée d'inclure un bout du code en question dans le post, ça permet de t'aider mieux et plus facilement

fredericmazue

Bonjour,

Quote:

e.KeyValue = 46 alors (then)

ce que je veux dire c'est que tu replace Keys.Delete par 46 et sa devrais etre bon

Si je puis me permettre, même si ça marche, ce n'est pas très bon.

Keys.Delete est un type énuméré et doit être testé comme tel comme tu l'as d'ailleurs très bien fait toi même dans l'exemple VB que tu as donné. Si tu remplaces par une valeur numérique tu deviens dépendant de l'implémentation et si tu compiles ton code sur une autre implémentation il risque de ne plus marcher si Keys.Delete n'y vaut pas 46.
Je pense, comme je l'ai dit dans un autre post, que l'erreur de poppins est une simple faute de frappe ou étourderie.

A voir le message d'erreur émis par le compilateur, elle avait probablement écrit

if(e.KeyValue = Keys.Delete)

alors qu'elle devait écrire

if(e.KeyValue == Keys.Delete)

en C# le = sert toujours à une affectation. Pour tester une valeur c'est ==

TroXsA

Merci :) vu que je connais pas le C# j'ai simplement trouver une solution de contournement :) ...

A bientot

fredericmazue

Quote:

Merci vu que je connais pas le C# j'ai simplement trouver une solution de contournement ...

Une solution de contournement, je l'avais bien compris comme ça

Tu sembles bien connaître VB, alors apprendre C# ne te posera aucune difficulté si le coeur t'en dit :)

A bientôt. C'est sympa de t'avoir comme nouveau participant régulier sur ce forum :)

TroXsA

:) Simpa merci
Puis j'evite d'aprendre le C# par peur de melanger les syntaxes quand je programme :wink:

A bientot

poppins

Merci pour vos efforts...
Je voulais juste préciser que e.KeyValue ==Keys.delete ne marche pas...
Avec 46, ça marche...

en tout cas, vous m'avez été d'un grand soutien, surtout que je suis nouveau avec les contrôles de c#....

fredericmazue

Quote:

Je voulais juste préciser que e.KeyValue ==Keys.delete ne marche pas...
Avec 46, ça marche...

Oui, mais non. Ce n'est pas (mais alors pas du tout) une bonne méthode de tester une valeur numérique sur un type énuméré. Je te renvoie à mon autre post.

Quand j'ai cité ton code c'était pour mettre en evidence que tu devais utiliser == et non =. Je me suis focalisé là dessus sans faire attention au reste. Les codes de touche ne se testent pas avec KeyValue mais avec KeyCode

Le code correct est donc

if(e.KeyCode == Keys.Delete)
// etc

Fonctionnement garanti :)
poppins

Oui, c'est correct comme ça...
Merci :lol:

TroXsA

alors la c'est complement nul
Site avec Spyware plus prono a ne pas cliquer dessus

fredericmazue

Quote:
alors la c'est complement nul
Site avec Spyware plus prono a ne pas cliquer dessus

Je viens de supprimer le message dont tu parles.
Il y a en de temps en temps. Mais on surveille ;)

TroXsA

Ok ....
Je vais devois formater mon PC car le Spy installer j'arrive pas a m'en debarasser avec tout les anti-Spy connu (free) de toute facon mon PC en avais besoin ;) (du formatage)

@+