SftTree/DLL 7.5 - Tree Control
SftBox/OCX 5.0 - Combo Box Control
SftButton/OCX 3.0 - Button Control
SftMask/OCX 7.0 - Masked Edit Control
SftTabs/OCX 6.5 - Tab Control (VB6 only)
SftTree/OCX 7.5 - Tree Control
SftPrintPreview/DLL 2.0 - Print Preview Control (discontinued)
SftTree/DLL 7.5 - Tree Control
SftBox/OCX 5.0 - Combo Box Control
SftButton/OCX 3.0 - Button Control
SftDirectory 3.5 - File/Folder Control (discontinued)
SftMask/OCX 7.0 - Masked Edit Control
SftOptions 1.0 - Registry/INI Control (discontinued)
SftPrintPreview/OCX 1.0 - Print Preview Control (discontinued)
SftTabs/OCX 6.5 - Tab Control (VB6 only)
SftTree/OCX 7.5 - Tree Control
SftTabs/NET 6.0 - Tab Control (discontinued)
SftTree/NET 2.0 - Tree Control
This sample illustrates sorting, column reordering, responding to column header clicks, context menus, controlling expand/collapse buttons and plus/minus graphics.
The source code is located at C:\Program Files (x86)\Softelvdm\SftTree OCX 7.5\Samples\Visual Studio - VB.NET\BookTable\Form1.vb or C:\Program Files\Softelvdm\SftTree OCX 7.5\Samples\Visual Studio - VB.NET\BookTable\Form1.vb (on 32-bit Windows versions).
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Application.Exit()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AxSftTree1.BulkUpdate = True
' set default item graphic. This can also be done at design time
AxSftTree1.Items.ItemImageExpandable.SetImageListH(ItemImageList.Handle.ToInt64(), 0)
AxSftTree1.Items.ItemImageExpanded.SetImageListH(ItemImageList.Handle.ToInt64(), 1)
AxSftTree1.Items.ItemImageLeaf.SetImageListH(ItemImageList.Handle.ToInt64(), 2)
' set the column header sort indicators
AxSftTree1.Headers.SortIndicators = SftTreeHeaderSortIndicatorsConstants.headerSortIndicatorsSftTreeAuto
AxSftTree1.get_Header(0).SortIndicator = SftTreeSortIndicatorConstants.sortIndicatorSftTreeAscending
Dim R As Random
R = New Random()
' set the cell font for books
Dim fnt As Font
fnt = New Font(AxSftTree1.Font, FontStyle.Bold)
Dim pFont As stdole.IFontDisp
pFont = OLECvt.ToIFontDisp(fnt)
Dim bk As Integer
For bk = 1 To 4
' add a book
Dim bookIndex As Integer
bookIndex = AxSftTree1.Items.Add("Book " & bk)
AxSftTree1.get_Cell(bookIndex, 1).Text = "Description for book " + bk.ToString()
Dim size As Integer
If bk = 1 Then
size = R.Next(1, 99)
Else
size = R.Next(1, 999)
End If
AxSftTree1.get_Cell(bookIndex, 2).Text = size.ToString()
AxSftTree1.get_Item(bookIndex).Data = size
' add chapters
Dim ch As Integer
For ch = 1 To 2
Dim index As Integer
index = AxSftTree1.Items.Add("Chapter " & ch)
AxSftTree1.get_Item(index).Level = 1
' add sections
Dim sect As Integer
For sect = 1 To 2
index = AxSftTree1.Items.Add("Section " & sect)
AxSftTree1.get_Item(index).Level = 2
Next
Next
' after adding the book and all dependent items, we
' collapse the item, so it's up to the user to expand it
AxSftTree1.get_Item(bookIndex).Collapse(False)
' set font
AxSftTree1.get_Cell(bookIndex, 0).Font = pFont
Next
' End of Mass-Update
AxSftTree1.BulkUpdate = False
' Make columns optimal
AxSftTree1.ColumnsObj.MakeOptimal()
' allow horizontal scrolling
AxSftTree1.Items.RecalcHorizontalExtent()
End Sub
Private Sub PlusMinusCheckBox_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PlusMinusCheckBox.CheckedChanged
If PlusMinusCheckBox.Checked Then
AxSftTree1.Items.PlusMinusImageExpandable.NETImageObject = PlusMinusImageList.Images(0)
AxSftTree1.Items.PlusMinusImageExpanded.NETImageObject = PlusMinusImageList.Images(1)
Else
AxSftTree1.Items.PlusMinusImageExpandable.Clear()
AxSftTree1.Items.PlusMinusImageExpanded.Clear()
End If
End Sub
Private Sub UglyCheckBox_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles UglyCheckBox.CheckedChanged
If UglyCheckBox.Checked Then
AxSftTree1.ButtonPicture = ButtonImageList.Images(0)
Else
AxSftTree1.ButtonPicture = Nothing
End If
End Sub
Private Sub SortHeader(ByVal ColNum As Integer)
Dim SortedColumn As Integer
' get the new, sorted column
SortedColumn = AxSftTree1.Headers.SortedColumn
If SortedColumn >= 0 Then
' Sort the data. Note that column 2 is sorted by Item.Data, which is
' an integer value (book size in pages)
If AxSftTree1.get_Header(SortedColumn).SortIndicator = SftTreeSortIndicatorConstants.sortIndicatorSftTreeAscending Then
If SortedColumn = 2 Then
AxSftTree1.Items.SortDependents(-1, SortedColumn, SftTreeSortTypeConstants.sortSftTreeAscItemData)
Else
AxSftTree1.Items.SortDependents(-1, SortedColumn, SftTreeSortTypeConstants.sortSftTreeAscending)
End If
Else
If SortedColumn = 2 Then
AxSftTree1.Items.SortDependents(-1, SortedColumn, SftTreeSortTypeConstants.sortSftTreeDscItemData)
Else
AxSftTree1.Items.SortDependents(-1, SortedColumn, SftTreeSortTypeConstants.sortSftTreeDescending)
End If
End If
End If
End Sub
Private Sub AxSftTree1_ItemClick(ByVal sender As Object, ByVal e As AxSftTreeLib75._DSftTreeEvents_ItemClickEvent) Handles AxSftTree1.ItemClick
Dim AreaType As SftTreeAreaTypeConstants
AreaType = e.areaType
Dim Button As SftTreeButtonConstants
Button = e.button
' respond to click in column header with left mouse button
If AreaType = SftTreeAreaTypeConstants.constSftTreeColumn And Button = SftTreeButtonConstants.constSftTreeLeftButton Then
SortHeader(e.colIndex)
ElseIf AreaType = SftTreeAreaTypeConstants.constSftTreeExpandAll Then
AxSftTree1.get_Item(e.itemIndex).Expand(False, True)
End If
End Sub
Private Sub AxSftTree1_ItemDblClick(ByVal sender As Object, ByVal e As AxSftTreeLib75._DSftTreeEvents_ItemDblClickEvent) Handles AxSftTree1.ItemDblClick
Dim AreaType As SftTreeAreaTypeConstants
AreaType = e.areaType
Dim Button As SftTreeButtonConstants
Button = e.button
' Respond to click in column header with left mouse button
If AreaType = SftTreeAreaTypeConstants.constSftTreeColumnRes And Button = SftTreeButtonConstants.constSftTreeLeftButton Then
AxSftTree1.get_Column(e.colIndex).MakeOptimal()
AxSftTree1.Items.RecalcHorizontalExtent()
ElseIf AreaType = SftTreeAreaTypeConstants.constSftTreeColumn And Button = SftTreeButtonConstants.constSftTreeLeftButton Then
SortHeader(e.colIndex)
End If
End Sub
Private Sub menuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuItem1.Click
MessageBox.Show("This sample doesn't implement any actions for the item menu. Try the column headers instead.")
End Sub
Private Sub menuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuItem2.Click
MessageBox.Show("This sample doesn't implement any actions for the item menu. Try the column headers instead.")
End Sub
Private Sub menuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuItem3.Click
MessageBox.Show("This sample doesn't implement any actions for the item menu. Try the column headers instead.")
End Sub
Private Sub menuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuItem4.Click
MessageBox.Show("This sample doesn't implement any actions for the item menu. Try the column headers instead.")
End Sub
Private Sub AxSftTree1_ContextMenuEvent(ByVal sender As Object, ByVal e As AxSftTreeLib75._DSftTreeEvents_ContextMenuEvent) Handles AxSftTree1.ContextMenuEvent
Dim P As Point
P = AxSftTree1.PointToScreen(New Point(e.x, e.y))
' Determine click context menu for header or item
Dim L As Integer, T As Integer, H As Integer, W As Integer
AxSftTree1.Headers.GetPositionPix(L, T, W, H)
If e.x >= L And e.x < L + W And e.y >= T And e.y <= T + H Then
HeaderMenu(PointToClient(P))
Return
End If
' determine item right-clicked
Dim ItemIndex As Integer
ItemIndex = AxSftTree1.Items.HitTestPix(e.x, e.y)
If ItemIndex >= 0 And ItemIndex < AxSftTree1.Items.Count Then
AxSftTree1.Items.Current = ItemIndex
AxSftTree1.get_Item(ItemIndex).Selected = True
AxSftTree1.CancelMode()
ItemContextMenu.Show(Me, PointToClient(P))
End If
End Sub
Private Sub menuHeader_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim mItem As MenuItem
mItem = sender
Dim colIndex As Integer
colIndex = mItem.Index
If mItem.Checked Then
AxSftTree1.get_Column(colIndex).WidthPix = 0
Else
AxSftTree1.get_Column(colIndex).MakeOptimal()
End If
AxSftTree1.Items.RecalcHorizontalExtent()
mItem.Checked = Not mItem.Checked
End Sub
Private Sub menuHeaderShowAll_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
AxSftTree1.ColumnsObj.MakeOptimal()
End Sub
Private Sub HeaderMenu(ByVal cursor As Point)
Dim Menu As System.Windows.Forms.ContextMenu
Menu = New ContextMenu()
Dim mItem As System.Windows.Forms.MenuItem
Dim Count As Integer
Count = 0
Dim C As Integer
For C = 0 To AxSftTree1.ColumnsObj.Count - 1
mItem = New System.Windows.Forms.MenuItem()
mItem.Text = AxSftTree1.get_Header(C).Text
If AxSftTree1.get_Column(C).WidthPix > 0 Then
mItem.Checked = True
Count = Count + 1
Else
mItem.Checked = False
End If
AddHandler mItem.Click, AddressOf Me.menuHeader_Click
Menu.MenuItems.Add(mItem)
Next
If Count <= 1 Then
For C = 0 To AxSftTree1.ColumnsObj.Count - 1
If Menu.MenuItems(C).Checked Then
Menu.MenuItems(C).Enabled = False
Else
Menu.MenuItems(C).Enabled = True
End If
Next
End If
mItem = New System.Windows.Forms.MenuItem("-")
Menu.MenuItems.Add(mItem)
mItem = New System.Windows.Forms.MenuItem("&Show All")
mItem.Enabled = (Count < AxSftTree1.ColumnsObj.Count)
AddHandler mItem.Click, AddressOf Me.menuHeaderShowAll_Click
Menu.MenuItems.Add(mItem)
AxSftTree1.CancelMode()
Menu.Show(Me, cursor)
End Sub
End Class