[VB.NET] Listview selecteditem = -1 bestaat niet meer?

Pagina: 1
Acties:

  • Wiebbe
  • Registratie: Februari 2001
  • Laatst online: 20-05 15:35

Wiebbe

<none />

Topicstarter
ik ben bezig met een programma, die in een listview erg mooi een directory laat zien.
Nou werkt dat gewoon erg goed een geen problemen mee.

Voordat ik de listview gebruikte gebruikte ik een listbox, en daarmee als er geen item geselect is, krijg je een listbox.selecteditem = -1. Zo kijk ik of er niks geselecteerd is.

Maar nu kwam ik toch best wel in de problemen met het converteren naar de code naar de list view:

Wat de bedoeling is dat met behulp van een context menu, de user een bestand kan aan klikken, en dan rechter klik: Rename doet.

Nou werkt dat ook helemaal naar behoren, maar waar ik mee zit is als hij niks heeft geselecteerd. Bij de listbox keek ik of de selecteditem waarde -1 was, was dat zo, dan gebeurde er niks.

Maar bij de Listviews werkt dat helaas niet.

Ik heb nu de volgende code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
       If lstview_replays.SelectedItems Is Nothing Then
        Else

            message = "Please enter a new name for the replay:"   ' Set prompt.
            title = "Rename"   ' Set title.
            defaultValue = lstview_replays.SelectedItems(0).SubItems(0).Text   ' Set default value.

            myValue = InputBox(message, title, defaultValue)
            New_file &= myValue

            If Old_file <> New_file And myValue <> "" Then
                File.Move(Old_file, New_file)
            End If

            Renew_List()
        End If


Zoals je ziet gebruik ik om te kijken of er niks geselecteerd is nu:

Visual Basic:
1
 If lstview_replays.SelectedItems Is Nothing Then 


Dit werkt helaas niet, aangezien als ik hem 'weg selecteer' (klik op een leeg stukje in de list) dan geeft hij een error, dat de listview index out of bound is.

Dat lijkt mij komen doordat de if functie niet goed zijn werk doet , en hij toch bij de code komt:
Visual Basic:
1
lstview_replays.SelectedItems(0).SubItems(0).Text

Ik heb het volgende geprobeerd, om er achter te komen of er niks is geselecteerd:

Visual Basic:
1
2
3
4
If lstview_replays.SelectedItems Is Nothing Then
If lstview_replays.SelectedItems.Count <> 0 Then
If lstview_replays.Selectedindices.Count <> 0 Then
If lstview_replays.Selectedindices(0) = -1 Then


die laatste is ongeveer zoals het met een listbox werkte, hij geeft als er wel wat is geselecteerd braaf de index van de geselecteerde item. Maar het grote verschil is als er niks is geselecteerd hij dan niet -1 geeft. Hij geeft dan gewoon een foutmelding.

code:
1
2
3
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in system.windows.forms.dll

Additional information: Specified argument was out of the range of valid values.


Nu is mijn vraag, weet iemand hoe ik er achter kan komen of er niks is geselecteerd zodat de rename functie niet werkt,

Of hoe ik de rename knop op het context menu kan uitschakelen zodra ik niks heb geselecteerd.

Voor de goede orde, multiselect staat uit, dus er is nooit meer dan 1 bestand geselecteerd.

Oh noes.. No more TreinTijden :(


  • Ru__
  • Registratie: Juni 2004
  • Niet online
Die property retourneert een collectie van geselecteerde items, dus als je daarvoor eerst een variabele instantieert en dan door de collectie heen loopt, dan moet het lukken (of de count van de collectie opvragen).

v.b.
Dim SelectedItemsCollection As ListView.SelectedListViewItemCollection = _
Me.ListView1.SelectedItems
Dim SelectedItem As ListViewItem

For Each SelectedItem In SelectedItemsCollection

  • Wiebbe
  • Registratie: Februari 2001
  • Laatst online: 20-05 15:35

Wiebbe

<none />

Topicstarter
Mjah,

zo ver was ik nog wel gekomen,
maar het vreemde is dat ook al maar je die variabele aan,
wat ik hier nu gewoon zo heb gedaan:
Visual Basic:
1
2
3
4
        Dim SelectedItemsCollection As ListView.SelectedListViewItemCollection = Me.lstview_replays.SelectedItems
        Dim SelectedItem As ListViewItem

        MsgBox(SelectedItemsCollection.Count())


Werkt het nog steeds niet.
Als ik 1 heb geselecteerd geeft hij braaf 1, maar zodra ik geen een is geselecteerd
geeft hij weer deze error:

code:
1
2
3
An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in system.windows.forms.dll

Additional information: Specified argument was out of the range of valid values.


Wat ik erg raar vind, waarom zou count niet kunnen werken als de collectie leeg is?

[edit]
ik ben even verder gaan kijken, en het blijkt dat hij wel een 0 terug geeft als ik de count opvraag met een button_click event. maar zodat ik het via het click event van het context menu doe, met precies dezelfde code, vind hij het niet meer lief, en geeft hij die error..

ik ben helaas nog niet veel wijzer..

[edit2]
Ik ben een grote sukkel ^_^
blijkt dat ik een waarde declareer met een waarde uit de listview voordat ik check of het aantal 0 is. Ru bedankt voor de info, het heeft me wel geholpen, en me weer een stoot gegeven dat netes programmeren belangrijk is :P

[ Voor 61% gewijzigd door Wiebbe op 16-06-2004 01:35 ]

Oh noes.. No more TreinTijden :(