EnsureVisible in TreeView: how to ensure that horiz. scrollbar is aligned left

Posted on 2009-03-31
Last Modified: 2012-05-06

I have a tree view with eg. following nodes

# People
+--# Custumers
     +-- # Anne Charles, Hillroad 14, 7766 MyTown, My Country
     +-- # Steve Jones, Forestroad 12, 7766 MyTown, My Country

With the command


I can ensure that "Anne Charles" is visible within the treeview. My problem is: If the treeview is not wide enough to show the complete node text of this node, the horizontal scroll bar is automatically moved to the right so that node structure shown left from the "A" in the text "Anne Charles" is not visible any more. Thus

    Anne Charles, Hillroad 14, 7766 MyTown, My Country
    Steve Jones, Forestroad 12, 7766 MyTown, My Country

is visible and the node structure is hidden.

Question: How can I ensure that the node "Anne Charles" is visible and also the horizontal scrollbar is aligned to the left, which means that the node structure left from the text is still visible?

Best wishes

[Visual Basic .net 2005]
Question by:mp45
  • 3
  • 2
LVL 85

Accepted Solution

Mike Tomlinson earned 400 total points
ID: 24035235
Use the SetScrollInfo() API like this:
Public Class Form1

    Private Const SB_VERT As Integer = 1

    Private Const SB_HORZ As Integer = 0

    Private Const SIF_PAGE As Integer = &H2

    Private Const SIF_POS As Integer = &H4

    Private Const SIF_RANGE As Integer = &H1

    Private Const SIF_TRACKPOS As Integer = &H10

    Private Const SIF_ALL As Integer = _


    Private Structure SCROLLINFO

        Public cbSize As Integer

        Public fMask As Integer

        Public nMin As Integer

        Public nMax As Integer

        Public nPage As Integer

        Public nPos As Integer

        Public nTrackPos As Integer

    End Structure

    Private Declare Function SetScrollInfo Lib "user32" _

        (ByVal hWnd As IntPtr, ByVal n As Integer, _

        ByRef lpcScrollInfo As SCROLLINFO, ByVal bool As Boolean) As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


        Dim sci As SCROLLINFO

        sci.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(sci)

        sci.fMask = SIF_ALL

        sci.nPos = 0 ' <--- this makes it go all the way to the left

        SetScrollInfo(treeViewM.Handle, SB_HORZ, sci, True)

    End Sub

End Class

Open in new window


Author Comment

ID: 24086528

Does it mean there does not exist a solution within the .net-framework, e.g. a treeview method I just have not realized yet?

LVL 85

Expert Comment

by:Mike Tomlinson
ID: 24087803
No...I didn't see anyway to do it via built-in methods...
(hopefully I didn't miss it too!)

Author Comment

ID: 24088276
thanks a lot.
I've found this solution in addition:

LVL 85

Expert Comment

by:Mike Tomlinson
ID: 24088676 essentially the same approach but with a different API.  =)

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

If you're writing a .NET application to connect to an Access .mdb database and use pre-existing queries that require parameters, you've come to the right place! Let's say the pre-existing query(qryCust) in Access takes a Date as a parameter and l…
Since .Net 2.0, Visual Basic has made it easy to create a splash screen and set it via the "Splash Screen" drop down in the Project Properties.  A splash screen set in this manner is automatically created, displayed and closed by the framework itsel…
It is a freely distributed piece of software for such tasks as photo retouching, image composition and image authoring. It works on many operating systems, in many languages.
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

746 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

10 Experts available now in Live!

Get 1:1 Help Now