Solved

Make Listview scroll down to selected item

Posted on 2001-09-02
20
1,408 Views
Last Modified: 2012-08-14
Hi guys,

Assume that i have a listview with thousand of items..

What i want to do is let the Listview control auto scroll down to the selected item. (Make the listview scroll down itself so i can 'see' the selected item.)

Here is the code:

Private Const WM_VSCROLL = &H115
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 Sub Command1_Click()
    Dim i As Long
    i = SendMessage(ListView1.hwnd, WM_VSCROLL, 0, ByVal CLng(Text1.Text))
End Sub

Private Sub Form_Load()
    For i = 1 To 250
        ListView1.ListItems.Add i, , i
        ListView1.ListItems(i).SubItems(1) = "Subitem " & i
    Next i
    Text1.Text = "25"
    Randomize
    Dim j As Long
    j = Int(Rnd * ListView1.ListItems.Count) + 1
    ListView1.ListItems(j).Selected = True
End Sub

What is less in this code above? What params should i use in SendMessage to do the tricks?

Reference: http://www.mvps.org/vbnet/code/subclass/lvscrollbars.htm

Any comments, resources or links? Thanks.
0
Comment
Question by:Ryan Chong
  • 8
  • 6
  • 3
  • +2
20 Comments
 
LVL 49

Author Comment

by:Ryan Chong
ID: 6449701
Hi guys,

I add a for loop in order to do the tricks. As get the maximum items can be displayed , and divide it with the total items count:

If i > 21 Then
                Dim k As Integer
                For k = 1 To Int(i / 21)
                    j = SendMessage(LVIns.hwnd, WM_VSCROLL, 3, 0)
                Next k
            End If

Any alternative?
0
 
LVL 6

Expert Comment

by:JonFish85
ID: 6449709
try this:

Listview1.TopIndex = ListView1.SelectedItem.Index

hope this helps!
0
 
LVL 1

Accepted Solution

by:
vblogic earned 43 total points
ID: 6449712
Listview.ListItems(i).EnsureVisible
0
 
LVL 49

Author Comment

by:Ryan Chong
ID: 6449754
Hi JonFish85,

TopIndex property only available on List box control, NOT listview control, i think maybe you missread my question.

To vblogic,

You code works fine.
0
 
LVL 6

Expert Comment

by:JonFish85
ID: 6449760
I knew it worked in listbox, but I wasnt sure if listview had the same property, but I thought it worth a shot... sorry it didnt work :-/
0
 
LVL 49

Author Comment

by:Ryan Chong
ID: 6449769
Hi JonFish85,

Unfortunately that listview don't have this property. It's ok : )

The ensurevisible method works fine for me, but if somebody can provides me a way to do same effect using API, points will be added.

Thanks Jon and vblogic.
0
 
LVL 1

Expert Comment

by:vblogic
ID: 6449770
Why use complicated API when ListView has built-in capability to achieve this effect?
0
 
LVL 49

Author Comment

by:Ryan Chong
ID: 6449780
Hi vblogic,

Don't worry, the points are yours.

I just want to learn more on doing same thing using API, more fun, isn't it?! : )
0
 
LVL 1

Expert Comment

by:vblogic
ID: 6449818
I think its more headache!  j/k

But I dont know...your code looks ok to me, except that I think you may need to get handle to the scrollbar of the listview, and not the listview itself.
0
 
LVL 16

Expert Comment

by:Richie_Simonetti
ID: 6451660
hearing
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 49

Author Comment

by:Ryan Chong
ID: 6463346
Can anyone show me the way to do this in API? or i will close this question.
0
 
LVL 16

Expert Comment

by:Richie_Simonetti
ID: 6463888
Since that control is created by API, i think that this site could give you a great clue:

http://www.mvps.org/btmtz/enumdeskvb/
http://www.mvps.org/btmtz/vbexplorer/
0
 
LVL 16

Expert Comment

by:Richie_Simonetti
ID: 6463890
0
 
LVL 16

Expert Comment

by:Richie_Simonetti
ID: 6463912
Maybe here (sorry, i have no time to test them by myself):
http://www.mvps.org/vbnet/index.html?code/subclass/lvscrollbars.htm

Hope it helps
0
 
LVL 16

Expert Comment

by:Richie_Simonetti
ID: 6463975
0
 
LVL 49

Author Comment

by:Ryan Chong
ID: 6469381
Sorry for late reply, i will check them and reply soon..

Thanks Richie.
0
 
LVL 16

Expert Comment

by:Richie_Simonetti
ID: 6469526
You are welcome anytime ;)
0
 
LVL 49

Author Comment

by:Ryan Chong
ID: 6475587
Hi vblogic,

Thanks for your help. But my problem is NOT solved yet..

To Richie,

Thanks to provide me some useful links, but still can not automatically scroll down the listview to selected item. Maybe no luck this time.

Anyway, thanks all to provide valuable comments.

0
 

Expert Comment

by:mbalsam
ID: 7467019
Try this
    ListView1.HideSelection = False
    ListView1.ListItems(x).Selected = True
    ListView1.ListItems(x+5).EnsureVisible

Mitch
0
 
LVL 49

Author Comment

by:Ryan Chong
ID: 7467359
Welcome to EE, mbalsam.

Thanks for the comment but this question is already PAQ, so it's not worth to post any comment in this question anymore.

Instead, try help other people to solve their problem in:
http://www.experts-exchange.com/Programming/Programming_Languages/Visual_Basic/

cheers :)
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Use Multiple Forms 4 48
Excel object stays open 19 70
MS Access Search and Replace Using VBA 6 57
Child Form in front 4 34
Have you ever wanted to restrict the users input in a textbox to numbers, and while doing that make sure that they can't 'cheat' by pasting in non-numeric text? Of course you can do that with code you write yourself but it's tedious and error-prone …
Most everyone who has done any programming in VB6 knows that you can do something in code like Debug.Print MyVar and that when the program runs from the IDE, the value of MyVar will be displayed in the Immediate Window. Less well known is Debug.Asse…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

948 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now