[VB]Selected items toevoegen aan listbox.

Pagina: 1
Acties:
  • 100 views sinds 30-01-2008
  • Reageer

  • ND863
  • Registratie: September 2001
  • Laatst online: 09-07-2022

ND863

Forget aircraft - Fly Airbus

Topicstarter
Ik zit hier al een tijdje te pijnzen, maar ik kom er niet meer uit.

Links op mijn Form heb ik een file box, en rechts heb een listbox staan, en hiertussen een 'toevoegen' knop. De bedoeling is om alleen de geselecteerde bestanden in de filebox toe te voegen/adden aan de listbox rechts als je op het knopje drukt.

Ik had iets in gedachte van een loop, dat hij telkens alleen een geselecteerde file 1 voor 1 toevoegd aan de listbox, en dan de volgende file. Maar hoe kan ik de geselecteerde van de niet geselecteerde APART van elkaar 'scheiden'?

Want als ik het volgende doe en ik selecteer alleen po4 :

p01
p02
p03
p04 <geselecteerd>
p05

Dan komt er bij de regel file1.listindex een '3' uitrollen. Waneer ik meerdere files selecteer dan komt er als waarde, de hoogste waarde van de geselecteerde files uitrollen.

Nu bedenk ik me wat, maar niet de effiecientste code :
code:
1
2
3
4
5
aantal = file1.listcount       'tel aantal bestanden in de dir, en zet waarde in aantal
for i = o to aantal
  if file.selected = true then list1.additem file.filename 'toevoegen als het geselecteerd is
  list1.listindex = list1.listindex + 1 'ga naar volgende bestands index
next i

Hier moet het programma ELKE bestand checken of deze dus geselecteerd is, zo ja toevoegen, zo niet....niet. Is er geen effiecientere manier?

Volgens mij klopt de code nog niet helemaal, maar dat moet ik straks ff uittesten, kwam nu pas in mij op :D :)

To be, or not to be a FRUITVLIEG!??


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 07:51

mulder

ik spuug op het trottoir

Is er geen effiecientere manier?
Nee.

[ Voor 87% gewijzigd door mulder op 10-01-2003 18:30 ]

oogjes open, snaveltjes dicht


  • ND863
  • Registratie: September 2001
  • Laatst online: 09-07-2022

ND863

Forget aircraft - Fly Airbus

Topicstarter
hms das jammer...

Hoe ga ik van bestand, naar het volgende bestand in de file box? ik kan het igg niet vinden

To be, or not to be a FRUITVLIEG!??


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 07:51

mulder

ik spuug op het trottoir

Eeuh ik weet niet wat je precies wilt, maar de code die je hebt dekt aardig de laading

oogjes open, snaveltjes dicht


  • Aerox.2000
  • Registratie: Februari 2001
  • Laatst online: 13-05 08:57
ND schreef op 10 januari 2003 @ 18:51:
hms das jammer...

Hoe ga ik van bestand, naar het volgende bestand in de file box? ik kan het igg niet vinden
Het zelfde als bij een list.... (als je dat bedoeld)

  • ND863
  • Registratie: September 2001
  • Laatst online: 09-07-2022

ND863

Forget aircraft - Fly Airbus

Topicstarter
Aerox.2000 schreef op 10 januari 2003 @ 19:30:
[...]


Het zelfde als bij een list.... (als je dat bedoeld)
Die optie zit er niet in bij een file box :)

To be, or not to be a FRUITVLIEG!??


Verwijderd

is er geen property listbox(i).select die je hiervoor kunt misbruiken?

Ik zou er overigens van maken:

dim x as item

for each x in listbox.items
if listbox(x).select=true (indien mogelijk natuurlijk)
list1.additem listbox(x).name
end if
next x

Heb vb al heeeeel lang niet meer gebruikt, dus ik kan er goed naast zitten, Je kunt natuurlijk ook een array bijhouden met welke items ge(de)selecteerd worden in het listbox click event ;)

  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 15-08 11:47

Sponge

Serious Game Developer

Verwijderd schreef op 10 januari 2003 @ 19:42:
is er geen property listbox(i).select die je hiervoor kunt misbruiken?

Ik zou er overigens van maken:

dim x as item

for each x in listbox.items
if listbox(x).select=true (indien mogelijk natuurlijk)
list1.additem listbox(x).name
end if
next x

Heb vb al heeeeel lang niet meer gebruikt, dus ik kan er goed naast zitten, Je kunt natuurlijk ook een array bijhouden met welke items ge(de)selecteerd worden in het listbox click event ;)
Mjah, ik zou het echter zo doen:

code:
1
2
3
4
5
6
7
8
9
Dim I as Long

'LockWindowUpdate ListBox.hwnd,lock (1)?
For I = 0 To FileListbox.ListCount -1
 If FileListBox.List(I).Selected = True Then 
      ListBox.Additem FileListBox.List(I)
 End If
Next X
'/Lockwindowupdate ListBox.hwnd, unlock (0)?


overigens is deze methode nog veel sneller te maken door de "LockWindowUpdate" API (oid), waardoor Windows de listbox niet tussendoor gaat refreshen. Achteraf zet je die weer uit, en wordt de listbox weer opnieuw getekend. Voor grote operaties is dit een manier om iets een stuk sneller te krijgen.

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 19-12-2025

DarkSilence

W3designer.nl

Je kan zo checken of een bapaalde regel geselecteerd is:

If FileList.Selected(2) = True Then
MsgBox "yepzzzz"
End If

Als regel 2 geselecteerd is dan krijg je de message! Ik hoop dat dit het antwoord is op je vraag. Suc6 :)

W3designer.nl


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 15-08 11:47

Sponge

Serious Game Developer

DarkSilence schreef op 10 januari 2003 @ 23:58:
Je kan zo checken of een bapaalde regel geselecteerd is:

If FileList.Selected(2) = True Then
MsgBox "yepzzzz"
End If

Als regel 2 geselecteerd is dan krijg je de message! Ik hoop dat dit het antwoord is op je vraag. Suc6 :)
Ups, ja ik zie dat ik een foutje heb gemaakt bij mijn code hierboven O-) :). Het is FileListBox.Selected, niet FileListbox.list.selected...

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Wat dacht je hiervan:

code:
1
2
3
4
5
For i = 0 To File1.ListCount - 1
  If File1.Selected(i) Then
    List1.AddItem File1.List(i)
  End If
Next i

  • DarkSilence
  • Registratie: December 2002
  • Laatst online: 19-12-2025

DarkSilence

W3designer.nl

41.6C.6D.61.72 schreef op 11 January 2003 @ 09:43:
[...]


Ups, ja ik zie dat ik een foutje heb gemaakt bij mijn code hierboven O-) :). Het is FileListBox.Selected, niet FileListbox.list.selected...
Niet alle lijsten zijn het zelfde en dat veroorzaakt af en toe verwarring.

W3designer.nl


  • ND863
  • Registratie: September 2001
  • Laatst online: 09-07-2022

ND863

Forget aircraft - Fly Airbus

Topicstarter
Thanks voor de hulp, ik ga het straks even uitproberen! :)

To be, or not to be a FRUITVLIEG!??


  • ND863
  • Registratie: September 2001
  • Laatst online: 09-07-2022

ND863

Forget aircraft - Fly Airbus

Topicstarter
Jes hij werkt! TOPPIE! :)

Nu heb ik nog 1 vraagje, hij slaat nu alles op in een txt bestandje, maarrr......nu plakt hij dus alles aanelkaar, maar ik wil dat de list items onderelkaar worden opgeslagen in een txt bestand. Dat opslaan lukt me wel, maar bij welke functie moet ik zijn voor dat onderelkaar? Ik gebruik deze code om op te slaan :

code:
1
2
3
Open "blabla.txt" For Output As #1
  Print #1, text1.text
 Close 1

To be, or not to be a FRUITVLIEG!??


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 07:51

mulder

ik spuug op het trottoir

vbCrLf

Is niet iets wat makkelijk op te zoeken is, maar toch is dit beginnersstuff: koop eens een boek of volg wat tutorials van inet. Het vergt wat geduld omdat je dingen moet doen die je al weet of niet interesseert maar uiteindelijk heb je een betere basis kennis

oogjes open, snaveltjes dicht


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Onder het motto: Niet kwaken voor je weet waar je het over hebt:

Deze code kan wel eens van pas komen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
   (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const LB_GETSELCOUNT = &H190
Private Const LB_GETSELITEMS = &H191

Private Sub Command1_Click()
    
    Dim numSelected As Long
    Dim i As Long
    
    'get the number of items selected.
    
    'If the listbox is single-select style, numSelected will return -1 (LB_ERR).
    'If the listbox is multiselect style, and nothing is selected, numSelected
    'returns 0. Otherwise, numSelected returns the number selected (ala List1.SelCount)
    numSelected = SendMessage(List1.hwnd, LB_GETSELCOUNT, 0&, ByVal 0&)
    
    Debug.Print numSelected; " items selected:"
    Debug.Print "index", "item"
   
    If numSelected > 0 Then
    
    'dim an array large enough to hold the indexes of the selected items
    ReDim sSelected(1 To numSelected) As Long
    
    'pass the array so Sendmessage can fill it with the selected item indexes
    Call SendMessage(List1.hwnd, LB_GETSELITEMS, numSelected, sSelected(1))
    
    'print out the items selected.
    For i = 1 To numSelected
        Debug.Print sSelected(i), List1.List(sSelected(i))
    Next
    End If
End Sub


Gooi een knop (Command1) op je form, en vervang list1 door whatever de naam van je listbox of "filelistbox" is.
De eerste API call geeft het aantal geselecteerde items terug, de tweede geeft een ARRAY met geselecteerde items terug. De rest van de code is om te laten zien wat het doet en dus overbodig...
Dit is dus wel DEGELIJK sneller dan door de hele lijst heen jassen (in een lijst van 3 items misschien niet, wel als je er een hebt met 1000+ items ofzo). Effectief heb je dus alleen dit nodig:

code:
1
2
3
4
5
6
7
8
9
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
   (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const LB_GETSELCOUNT = &H190
Private Const LB_GETSELITEMS = &H191

numSelected = SendMessage(List1.hwnd, LB_GETSELCOUNT, 0&, ByVal 0&)
ReDim sSelected(1 To numSelected) As Long
Call SendMessage(List1.hwnd, LB_GETSELITEMS, numSelected, sSelected(1))

[ Voor 23% gewijzigd door RobIII op 12-01-2003 06:26 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • ND863
  • Registratie: September 2001
  • Laatst online: 09-07-2022

ND863

Forget aircraft - Fly Airbus

Topicstarter
Heey bedankt man! Ik was al aan het zoeken richting API functies. :)

To be, or not to be a FRUITVLIEG!??

Pagina: 1