Make Listview scroll down to selected item

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.
LVL 56
Ryan ChongBusiness Systems Analyst , ex-Senior Application EngineerAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Ryan ChongBusiness Systems Analyst , ex-Senior Application EngineerAuthor Commented:
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
JonFish85Commented:
try this:

Listview1.TopIndex = ListView1.SelectedItem.Index

hope this helps!
0
vblogicCommented:
Listview.ListItems(i).EnsureVisible
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
The Ultimate Tool Kit for Technolgy Solution Provi

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy for valuable how-to assets including sample agreements, checklists, flowcharts, and more!

Ryan ChongBusiness Systems Analyst , ex-Senior Application EngineerAuthor Commented:
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
JonFish85Commented:
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
Ryan ChongBusiness Systems Analyst , ex-Senior Application EngineerAuthor Commented:
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
vblogicCommented:
Why use complicated API when ListView has built-in capability to achieve this effect?
0
Ryan ChongBusiness Systems Analyst , ex-Senior Application EngineerAuthor Commented:
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
vblogicCommented:
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
Richie_SimonettiIT OperationsCommented:
hearing
0
Ryan ChongBusiness Systems Analyst , ex-Senior Application EngineerAuthor Commented:
Can anyone show me the way to do this in API? or i will close this question.
0
Richie_SimonettiIT OperationsCommented:
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
Richie_SimonettiIT OperationsCommented:
0
Richie_SimonettiIT OperationsCommented:
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
Richie_SimonettiIT OperationsCommented:
0
Ryan ChongBusiness Systems Analyst , ex-Senior Application EngineerAuthor Commented:
Sorry for late reply, i will check them and reply soon..

Thanks Richie.
0
Richie_SimonettiIT OperationsCommented:
You are welcome anytime ;)
0
Ryan ChongBusiness Systems Analyst , ex-Senior Application EngineerAuthor Commented:
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
mbalsamCommented:
Try this
    ListView1.HideSelection = False
    ListView1.ListItems(x).Selected = True
    ListView1.ListItems(x+5).EnsureVisible

Mitch
0
Ryan ChongBusiness Systems Analyst , ex-Senior Application EngineerAuthor Commented:
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
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Visual Basic Classic

From novice to tech pro — start learning today.