Solved

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

Posted on 2009-03-31
5
454 Views
Last Modified: 2012-05-06
Hi,

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

    Me.treeViewM.Nodes(0).Nodes(0).Nodes(0).EnsureVisible()

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
Michael

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

Accepted Solution

by:
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 = _

        (SIF_RANGE Or SIF_PAGE Or SIF_POS Or SIF_TRACKPOS)
 

    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

        Me.treeViewM.Nodes(0).Nodes(0).Nodes(0).EnsureVisible()
 

        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

0
 

Author Comment

by:mp45
ID: 24086528
thanks.

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

Michael
0
 
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!)
0
 

Author Comment

by:mp45
ID: 24088276
thanks a lot.
I've found this solution in addition:
http://www.codeproject.com/KB/tree/NoScrollingTree.aspx

Michael
0
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 24088676
Kewl...so essentially the same approach but with a different API.  =)
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

This tutorial demonstrates one way to create an application that runs without any Forms but still has a GUI presence via an Icon in the System Tray. The magic lies in Inheriting from the ApplicationContext Class and passing that to Application.Ru…
Article by: jpaulino
XML Literals are a great way to handle XML files and the community doesn’t use it as much as it should.  An XML Literal is like a String (http://msdn.microsoft.com/en-us/library/system.string.aspx) Literal, only instead of starting and ending with w…
Many functions in Excel can make decisions. The most simple of these is the IF function: it returns a value depending on whether a condition you describe is true or false. Once you get the hang of using the IF function, you will find it easier to us…
I designed this idea while studying technology in the classroom.  This is a semester long project.  Students are asked to take photographs on a specific topic which they find meaningful, it can be a place or situation such as travel or homelessness.…

911 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

19 Experts available now in Live!

Get 1:1 Help Now