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 demonstrates cell editing with edit controls and combo boxes.
Imports System.Reflection
Imports Softelvdm.Controls
Imports Softelvdm.SftTreeNET
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    ' This sample demonstrates cell editing using edit controls and combo boxes.
    ' To prepare for this sample, create a new project with a blank form and add
    ' a SftTree/NET control named sftTree1.
    ' In addition, add a textbox named textbox1 and a combo box named comboBox1.
    sftTree1.Initializing = True
    sftTree1.Columns.Count = 3
    For i As Integer = 0 To 99
        Dim item As ItemClass
        item = sftTree1.ItemCollection.Add(New String() {"Can't", "Text", "Combo"})
    Next
    sftTree1.Columns.MakeOptimal(0, False)
    sftTree1.RecalcHorizontalExtent()
    sftTree1.Initializing = False
End Sub
Private Sub sftTree1_EditAllowed(ByVal sender As Object, ByVal e As Softelvdm.SftTreeNET.EditAllowedEventArgs) Handles sftTree1.EditAllowed
    Debug.Write("** EditAllowed")
    DumpValues(e)
    If e.Cell.ColumnIndex = 0 Then ' Can't edit the first column
        e.Allowed = False
    End If
End Sub
Private Sub sftTree1_EditSetup(ByVal sender As Object, ByVal e As Softelvdm.SftTreeNET.EditSetupEventArgs) Handles sftTree1.EditSetup
    Debug.Write("** EditSetup")
    DumpValues(e)
    If e.Cell.ColumnIndex = 1 Then
        ' We use a textbox for column 1 (remember, column 0 is not editable,
        ' because of the EditAllowed event
        ' set all textbox properties
        textBox1.Parent = sftTree1     ' make the tree control the parent window
        textBox1.Text = e.Cell.Text
        Dim h As Integer = textBox1.Height
        Dim vOffs As Integer = (e.rCell.Size.Height - textBox1.Height) / 2
        textBox1.Location = New Point(e.rCell.Location.X, e.rCell.Location.Y + vOffs)
        textBox1.Width = e.rCell.Width
        ' make it visible and enable it
        textBox1.Enabled = True
        textBox1.Visible = True
        ' off we go!
        textBox1.BringToFront()
        textBox1.Focus()
        e.EditControl = textBox1
    ElseIf e.Cell.ColumnIndex = 2 Then
        ' We use a combobox for column 2
        comboBox1.Parent = sftTree1
        comboBox1.Items.Clear()
        comboBox1.Items.AddRange(New String() {"Selection 1", "Selection 2", "Selection 3", "Selection 4", "Selection 5"})
        comboBox1.Text = e.Cell.Text
        Dim h As Integer = comboBox1.Height
        Dim vOffs As Integer = (e.rCell.Size.Height - comboBox1.Height) / 2
        comboBox1.Location = New Point(e.rCell.Location.X, e.rCell.Location.Y + vOffs)
        comboBox1.Width = e.rCell.Width
        ' make it visible and enable it
        comboBox1.Enabled = True
        comboBox1.Visible = True
        ' off we go!
        comboBox1.BringToFront()
        comboBox1.Focus()
        e.EditControl = comboBox1
    End If
End Sub
Private Sub sftTree1_EditValidate(ByVal sender As Object, ByVal e As Softelvdm.SftTreeNET.EditValidateEventArgs) Handles sftTree1.EditValidate
    If TypeOf e.EditControl Is TextBox Then
        If textBox1.Text = "" Then ' you MUST enter something
            e.Valid = False
            MessageBox.Show("Cell text can't be empty in this example.")
        End If
    ElseIf TypeOf e.EditControl Is ComboBox Then
        If comboBox1.Text = "" Then ' you MUST select something
            e.Valid = False
            MessageBox.Show("Cell text can't be empty in this example.")
        End If
    End If
End Sub
Private Sub sftTree1_EditEnded(ByVal sender As Object, ByVal e As Softelvdm.SftTreeNET.EditEndedEventArgs) Handles sftTree1.EditEnded
    If TypeOf e.EditControl Is TextBox Then
        ' save the new cell text if neccessary
        If (e.SaveValue) Then
            e.Cell.Text = textBox1.Text
        End If
        ' hide the text box and make the form the control's parent
        textBox1.Visible = False
        textBox1.Enabled = False
        textBox1.Parent = sftTree1.Parent
    ElseIf TypeOf e.EditControl Is ComboBox Then
        ' save the new cell text if neccessary
        If (e.SaveValue) Then
            e.Cell.Text = comboBox1.Text
        End If
        ' hide the text box and make the form the control's parent
        comboBox1.Visible = False
        comboBox1.Enabled = False
        comboBox1.Parent = sftTree1.Parent
    End If
    Debug.Write("** EditEnded")
    DumpValues(e)
End Sub
Private Sub sftTree1_ItemClick(ByVal sender As Object, ByVal e As Softelvdm.SftTreeNET.ItemClickEventArgs) Handles sftTree1.ItemClick
    Debug.Write("** ItemClick")
    DumpValues(e)
    If e.Area = ItemClickAreaEnum.CellSel Then
        e.Cell.Edit()  ' Start cell editing
    End If
End Sub
Private Sub textBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles textBox1.KeyDown
    If e.KeyCode = Keys.Up Then
        sftTree1.EditNavigate(EditNavigateEnum.Up)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Down Then
        sftTree1.EditNavigate(EditNavigateEnum.Down)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Left And (e.Modifiers And Keys.Control) <> 0 Then ' Ctrl+Left
        sftTree1.EditNavigate(EditNavigateEnum.Left)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Right And (e.Modifiers And Keys.Control) <> 0 Then ' Ctrl+Right
        sftTree1.EditNavigate(EditNavigateEnum.Right)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Home And (e.Modifiers And Keys.Control) <> 0 Then ' Ctrl+Home
        sftTree1.EditNavigate(EditNavigateEnum.Home)
        e.Handled = True
    ElseIf e.KeyCode = Keys.End And (e.Modifiers And Keys.Control) <> 0 Then ' Ctrl+End
        sftTree1.EditNavigate(EditNavigateEnum.End)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Tab And (e.Modifiers And Keys.Shift) <> 0 Then ' Shift+Tab
        sftTree1.EditNavigate(EditNavigateEnum.Left)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Tab And (e.Modifiers And Keys.Shift) = 0 Then ' Tab
        sftTree1.EditNavigate(EditNavigateEnum.Right)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Escape Then ' ESC
        sftTree1.EndEdit(False)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Return Then ' Return
        sftTree1.EndEdit(True)
        e.Handled = True
    End If
End Sub
Private Sub textBox1_PreviewKeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles textBox1.PreviewKeyDown
    If (e.KeyCode = Keys.Tab) Then
        e.IsInputKey = True
    ElseIf (e.KeyCode = Keys.Escape) Then
        e.IsInputKey = True
    End If
End Sub
Private Sub comboBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles comboBox1.KeyDown
    If (e.KeyCode = Keys.Up And (e.Modifiers And Keys.Control) <> 0) Then ' Ctrl+Up
        sftTree1.EditNavigate(EditNavigateEnum.Up)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Down And (e.Modifiers And Keys.Control) <> 0 Then ' Ctrl+Down
        sftTree1.EditNavigate(EditNavigateEnum.Down)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Left And (e.Modifiers And Keys.Control) <> 0 Then ' Ctrl+Left
        sftTree1.EditNavigate(EditNavigateEnum.Left)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Right And (e.Modifiers And Keys.Control) <> 0 Then ' Ctrl+Right
        sftTree1.EditNavigate(EditNavigateEnum.Right)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Home And (e.Modifiers And Keys.Control) <> 0 Then ' Ctrl+Home
        sftTree1.EditNavigate(EditNavigateEnum.Home)
        e.Handled = True
    ElseIf e.KeyCode = Keys.End And (e.Modifiers And Keys.Control) <> 0 Then ' Ctrl+End
        sftTree1.EditNavigate(EditNavigateEnum.End)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Tab And (e.Modifiers And Keys.Shift) <> 0 Then ' Shift+Tab
        sftTree1.EditNavigate(EditNavigateEnum.Left)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Tab And (e.Modifiers And Keys.Shift) = 0 Then ' Tab
        sftTree1.EditNavigate(EditNavigateEnum.Right)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Escape And Not comboBox1.DroppedDown Then ' ESC (only if dropdown is not showing)
        sftTree1.EndEdit(False)
        e.Handled = True
    ElseIf e.KeyCode = Keys.Return And Not comboBox1.DroppedDown Then ' Return (only if dropdown is not showing)
        sftTree1.EndEdit(True)
        e.Handled = True
    End If
End Sub
Private Sub comboBox1_PreviewKeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs) Handles comboBox1.PreviewKeyDown
    If (e.KeyCode = Keys.Tab) Then
        e.IsInputKey = True
    ElseIf (e.KeyCode = Keys.Escape And Not comboBox1.DroppedDown) Then ' (only if dropdown is not showing)
        e.IsInputKey = True
    End If
End Sub
' This is a small helper routine to show all properties and fields of an object
Private Sub DumpValues(ByVal o As Object)
    Dim api() As PropertyInfo = o.GetType().GetProperties()
    For Each pi As PropertyInfo In api
        Debug.Write(" " & pi.Name & " " & pi.GetValue(o, New Object() ))
    Next
    Dim afi() As FieldInfo = o.GetType().GetFields()
    For Each fi As FieldInfo In afi
        Dim t As Object = fi.GetValue(o)
        Dim s As String = "(null)"
        If Not t Is Nothing Then s = t.ToString()
        Debug.Write(" " & fi.Name & " " & s)
    Next
    Debug.WriteLine("")
End Sub
End Class