Toon posts:

[VB] ListItems + SelectedItem.EnsureVisible

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een vraag over listview control.
Wat ik zo graag zou willen is dat een bepaalde listview item geselecteerd wordt, door de key mee te geven.

ik dacht dat het met de volgende code moest gaan werken:
code:
1
2
Set mainform.ListView1.SelectedItem = mainform.ListView1.ListItems(30)
Call mainform.ListView1.SelectedItem.EnsureVisible

Helaas werkt het niet.
Teneerste is 30 niet de id en ook niet de index. Wat het dan wel is weet ik niet.
Tentweede is het dan niet zo dat er een row geselecteerd word maar alleen boven aan komt te staan.

int 30 moet natuurlijk gewoon variable worden maar heb dit even gebruikt om te testen.

Heeft iemand hier ervaring mee?

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:59
Die 30, dat staat volgens mij gewoon voor het 30ste item in de listview.
Als je de Selected property zet op een bepaald listitem, dan wordt dat item geselecteerd. Je kan het ook nog in combinatie gebruiken met de ItemFocused property ofzo.

Die EnsureVisible zorgt ervoor dat het selected item ook zichtbaar staat in de listview. (Dwz, als het item selected het laatste item is in de listview, wordt er naar beneden gescrolled zodat de selected item zichtbaar is).

https://fgheysels.github.io/


Verwijderd

Topicstarter
Dankje whoami

Maar hoe krijg ik het nou voor elkaar dat ik hem kan selecten via de unique ID uit de database. Ik heb namelijk de de unique id uit de database als key geadd. voor elke row in de listview is dus de unique id uit de database bekend.

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:59
Tja, ik ken geen VB, maar dit is hoe je het bv in Delphi kunt doen:

In een ListView heb je per ListItem een property 'Data'. Daar steek ik m'n primary key in. Je kunt via de memberfunction 'FindData' het gewenste ListItem gaan opzoeken.
Hoe je het in VB kunt doen, ... ik vermoed op een gelijkaardige manier.

https://fgheysels.github.io/


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

In VB heeft elk ListItem een Key property. Als je daar je PK instopt kun je gewoon zo doen:
code:
1
2
3
PK = "item30" <-- Dit is dus de PK van de item die je wilt hebben
Set ListView1.SelectedItem = ListView1.ListItems(PK)
ListView1.SelectedItem.EnsureVisible

De Key van een listitem MOET trouwens met een niet-numeriek karakter beginnen. Ik prefix 'em meestal met "i" of "k" ofzo.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:59
Op vrijdag 14 juni 2002 14:30 schreef Gerco het volgende:
De Key van een listitem MOET trouwens met een niet-numeriek karakter beginnen. Ik prefix 'em meestal met "i" of "k" ofzo.
Da's vreemd... Heb je in VB dan niet een Tag property ofzo per ListItem die gewoon een Variant ofzo is? In Delphi moet de Data property een pointer bevatten, dus kan je daar eigenlijk ook een pointer naar een willekeurig datatype in kwijt.

https://fgheysels.github.io/


Verwijderd

Topicstarter
zoals ik het nu heb gedaan is als volgt. Met het aanmaken van van rows in m'n listviews heb ik de volgende regel in een loop gezet:
code:
1
Set list_item = mainform.ListView1.ListItems.Add(, "key " & vartemp, vartemp2)

dus nu moet ik key 30 gebruiken?

of begrijp ik je verkeerd?

Verwijderd

Topicstarter
sorry had eerst moeten kijken of het werkte ja of de nee.
Het werkt dus. Aaleen meot hij niet alle zichtbaar zijn maar ook geselecteerd. maar Whoami had het hier al over gehad.

Verwijderd

Topicstarter
in visual Basic bestaat ItemFocused niet. Ik heb overigens gebruik gemaakt van:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Function fLVFullRowSelect(LV As Control) As Boolean
'Sets FullRowSelect for a ListView
'
Dim lngStyle As Long

   'Find out the current style first
   lngStyle = apiSendMessageLong(LV.hWnd, _
                           LVM_GETEXTENDEDLISTVIEWSTYLE, _
                           0&, 0&)
                           
   If lngStyle And LVS_EX_FULLROWSELECT Then
    'Listview already has FullRowSelect enabled
    fLVFullRowSelect = True
   Else
    'Set the property to True
    fLVFullRowSelect = (apiSendMessageLong(LV.hWnd, _
                           LVM_SETEXTENDEDLISTVIEWSTYLE, _
                           LVS_EX_FULLROWSELECT, True) = 0)
   End If
End Function

Dit zorgt er voor dat als ik iets selecteer de hele row geselecteerd wordt. (misschien geen nuttige info maar ok)

ok to the point hoe krijg ik hem nou niet alleen zichtbaar maar ook geselecteerd?

Alvast bedankt.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

Op vrijdag 14 juni 2002 14:39 schreef whoami het volgende:
Da's vreemd... Heb je in VB dan niet een Tag property ofzo per ListItem die gewoon een Variant ofzo is?
Er is een Tag property ja, maar daarmee kun je een item niet aanspreken via de ListItems() collection. Dan moet je handmatig de collection aflopen. Als je de key gebruikt, doet het Collection object dat voor je. Gewoon een kwestie van luiheid.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

Op vrijdag 14 juni 2002 15:11 schreef Helerion het volgende:
Dit zorgt er voor dat als ik iets selecteer de hele row geselecteerd wordt. (misschien geen nuttige info maar ok)
Het aanvinken van FullRowSelect in de properties dialog box van de listview doet dat ook:
Afbeeldingslocatie: http://www.gdries.com/listview.jpg
En als ik hier de SelectedItem property zet, wordt 'ie OOK selected hoor... zeker weten dat je hideselection niet aan hebt staan (zie ook bovenstaand plaatje)?

Hier een stukje code wat bij mij perfect werkt:
code:
1
Set lvwOpnames.SelectedItem = lvwOpnames.HitTest(x, y)

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:59
De hideselection heeft op zicht toch niets te maken met het al of niet tonen welk een item er geselecteerd is ALS de ListView de focus heeft (of zelfs de form waarop de ListView staat de actieve form is)?

https://fgheysels.github.io/


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

Op vrijdag 14 juni 2002 15:34 schreef whoami het volgende:
De hideselection heeft op zicht toch niets te maken met het al of niet tonen welk een item er geselecteerd is ALS de ListView de focus heeft (of zelfs de form waarop de ListView staat de actieve form is)?
Dat weet ik, maar als hideselection aanstaat (default?) en de listview heeft GEEN focus, dan zie je niet dat er een item geselecteerd is... en aangezien ik niet weet of die listview focus heeft in zijn code, zou het relevant kunnen zijn.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:59
Ik heb het net even getest en het is idd zo dat het niet voldoende is dat de form waarop de listview staat de actieve moet zijn.
De ListView moet wel degelijk de focus hebben wil je zien welk item er selected is en als de HideSelection property op True staat.

Dus:
-Je zorgt ervoor dat je ListView de focus heeft
-of je zorgt dat de HideSelection op False staat.

https://fgheysels.github.io/


Verwijderd

Topicstarter
hahahaha hide selection stond idd aan. Wel echt vervelend dat alles weer van een vinkje kan afhangen. Maar bedankt voor de goede tip!!!

Loop nu wel weer tegen een ander probleem probeer hier eerst zelf uit te komen.

He Mannen nogmaals bedankt :)
Pagina: 1