Hide

SftTree/OCX 7.5 - ActiveX Tree Control

Display
Print

CellEditingII Sample (VB.NET)

This sample illustrates cell editing using edit controls and combo boxes, cell navigation, uneditable cells, checkbox cell image.

The source code is located at C:\Program Files (x86)\Softelvdm\SftTree OCX 7.5\Samples\Visual Studio - VB.NET\CellEditingII\Form1.vb or C:\Program Files\Softelvdm\SftTree OCX 7.5\Samples\Visual Studio - VB.NET\CellEditingII\Form1.vb (on 32-bit Windows versions).


    Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click
        Application.Exit()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim ItemIndex As Integer
        Dim s As String

        Text1.Text = "In this example, the first column uses a SftMask/OCX Masked Edit control to enter an amount.  Try entering a new amount, then type + or - to access the built-in popup calculator." & ControlChars.CrLf & ControlChars.CrLf & "The second column uses a SftBox/OCX Combo Box control." & ControlChars.CrLf & ControlChars.CrLf & "The last column again uses a SftMask/OCX Masked Edit control to enter a date.  Click on the drop down button to access the popup calendar."

        ItemIndex = AxSftTree1.Items.Add("Edit cells" & ControlChars.CrLf & "using SftMask/OCX:")
        AxSftTree1.get_Item(ItemIndex).EditIgnore = True
        AxSftTree1.get_Cell(ItemIndex, 1).Text = ControlChars.CrLf & "using SftBox/OCX:"
        AxSftTree1.get_Cell(ItemIndex, 2).Text = "and again" & ControlChars.CrLf & "using SftMask/OCX:"

        Dim Dt As DateTime
        ItemIndex = AxSftTree1.Items.Add("5.33")
        AxSftTree1.get_Cell(ItemIndex, 0).TextHAlign = SftTreeHAlignDefaultConstants.halignSftTreeDefaultRight
        AxSftTree1.get_Cell(ItemIndex, 1).Text = "Option 1"
        Dt = DateTime.Today.AddDays(-1)
        s = "short"
        SftMaskDateTime.Calendar.FormatDate(Dt, s)
        AxSftTree1.get_Cell(ItemIndex, 2).Text = s
        AxSftTree1.get_Cell(ItemIndex, 2).DataTag = Dt

        ItemIndex = AxSftTree1.Items.Add("122.33")
        AxSftTree1.get_Cell(ItemIndex, 0).TextHAlign = SftTreeHAlignDefaultConstants.halignSftTreeDefaultRight
        AxSftTree1.get_Cell(ItemIndex, 1).Text = "Option 3"
        Dt = DateTime.Today
        s = "short"
        SftMaskDateTime.Calendar.FormatDate(Dt, s)
        AxSftTree1.get_Cell(ItemIndex, 2).Text = s
        AxSftTree1.get_Cell(ItemIndex, 2).DataTag = Dt

        ItemIndex = AxSftTree1.Items.Add("66.05")
        AxSftTree1.get_Cell(ItemIndex, 0).TextHAlign = SftTreeHAlignDefaultConstants.halignSftTreeDefaultRight
        AxSftTree1.get_Cell(ItemIndex, 1).Text = "Option 2"
        Dt = DateTime.Today.AddDays(1)
        s = "short"
        SftMaskDateTime.Calendar.FormatDate(Dt, s)
        AxSftTree1.get_Cell(ItemIndex, 2).Text = s
        AxSftTree1.get_Cell(ItemIndex, 2).DataTag = Dt

        AxSftTree1.ColumnsObj.MakeOptimal()
        AxSftTree1.RowHeaders.MakeOptimal()
        AxSftTree1.Items.RecalcHorizontalExtent()

        AxSftTree1.get_Item(0).Selected = True
    End Sub

    Private Sub AxSftTree1_ItemClick(ByVal sender As Object, ByVal e As AxSftTreeLib75._DSftTreeEvents_ItemClickEvent) Handles AxSftTree1.ItemClick
        ' User clicked on a cell
        Dim AreaType As SftTreeAreaTypeConstants
        AreaType = e.areaType
        If AreaType = SftTreeAreaTypeConstants.constSftTreeCellText Then
            AxSftTree1.get_Cell(e.itemIndex, e.colIndex).Edit(0, 0)
        End If
    End Sub

    Private Sub AxSftTree1_EditAllowed(ByVal sender As Object, ByVal e As AxSftTreeLib75._DSftTreeEvents_EditAllowedEvent) Handles AxSftTree1.EditAllowed
        ' Last chance to suppress cell editing for a cell
        'If e.itemIndex = 1 And e.colIndex = 1 Then
        '    e.allowed = False
        'End If
    End Sub

    Private Sub AxSftTree1_EditInitializing(ByVal sender As Object, ByVal e As AxSftTreeLib75._DSftTreeEvents_EditInitializingEvent) Handles AxSftTree1.EditInitializing
        Dim ctrl As System.Windows.Forms.Control

        ' Choose a control based on current column being edited
        If e.editCol = 0 Then
            ctrl = SftMaskAmount
        ElseIf e.editCol = 1 Then
            ctrl = SftBox1
        Else
            ctrl = SftMaskDateTime
        End If

        ' LeftPix/TopPix/WidthPix/HeightPix describes the current cell area
        ' we need to return the position and size needed for editing.
        ' In this example, we use the height of the control on the form
        ' and center it over the cell.
        e.topPix = e.topPix + (e.heightPix - ctrl.Height) / 2
        e.heightPix = ctrl.Height

        ' Set the text in the control used for cell editing and
        ' set other control-specific properties
        If ctrl Is SftMaskAmount Then
            SftMaskAmount.Text = AxSftTree1.get_Cell(e.editIndex, e.editCol).Text
            SftMaskAmount.SelStart = 0
            SftMaskAmount.SelLength = 999
        ElseIf ctrl Is SftMaskDateTime Then
            Dim Dt As DateTime
            Dt = AxSftTree1.get_Cell(e.editIndex, e.editCol).DataTag
            SftMaskDateTime.Contents.DateTime = Dt
        Else
            SftBox1.Items.Clear()
            Dim ItemIndex As Integer
            ItemIndex = SftBox1.Items.Add("Option 1")
            SftBox1.get_Cell(ItemIndex, 1).Text = "Description for option 1"
            ItemIndex = SftBox1.Items.Add("Option 2")
            SftBox1.get_Cell(ItemIndex, 1).Text = "Description for option 2"
            ItemIndex = SftBox1.Items.Add("Option 3")
            SftBox1.get_Cell(ItemIndex, 1).Text = "Description for option 3"
            Dim S As String
            S = AxSftTree1.get_Cell(e.editIndex, e.editCol).Text
            If SftBox1.Items.Find(S, 0, 0, False, True, True) < 0 Then
                ItemIndex = SftBox1.Items.Add(S)
                SftBox1.get_Cell(ItemIndex, 1).Text = "Description for " + S
            End If
            SftBox1.Columns.MakeOptimal(0)
            SftBox1.RecalcHorizontalExtent(0)
            SftBox1.Edit.Text = S
        End If

        ' Return the control's window handle
        e.window = ctrl.Handle.ToInt32()
        e.vData = ctrl

        ' Define navigation keys
        ' VK_TAB
        AxSftTree1.CellEditIntercept(9, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
        ' VK_RETURN
        AxSftTree1.CellEditIntercept(13, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
        ' VK_HOME
        AxSftTree1.CellEditIntercept(36, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar)
        ' VK_END
        AxSftTree1.CellEditIntercept(35, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar)
        If ctrl Is SftMaskAmount Then
            ' We want these keys just for the amount edit control.
            ' VK_UP
            AxSftTree1.CellEditIntercept(38, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
            ' VK_DOWN
            AxSftTree1.CellEditIntercept(40, SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeControlChar Or SftTreeCellEditInterceptStyleConstants.cellEditInterceptSftTreeShiftChar)
        End If
    End Sub

    Private Sub AxSftTree1_EditInitialized(ByVal sender As Object, ByVal e As AxSftTreeLib75._DSftTreeEvents_EditInitializedEvent) Handles AxSftTree1.EditInitialized
        ' We position the control (ActiveX controls must be positioned using the EditInitialized event)
        e.positioned = True

        Dim ctrl As Control
        ctrl = e.vData
        If ctrl Is SftMaskAmount Then
            SftMaskAmount.Left = e.leftPix
            SftMaskAmount.Top = e.topPix
            SftMaskAmount.Width = e.widthPix
            SftMaskAmount.Height = e.heightPix
            SftMaskAmount.Enabled = True
            SftMaskAmount.Visible = True
            SftMaskAmount.Focus()
        ElseIf ctrl Is SftMaskDateTime Then
            SftMaskDateTime.Left = e.leftPix
            SftMaskDateTime.Top = e.topPix
            SftMaskDateTime.Width = e.widthPix
            SftMaskDateTime.Height = e.heightPix
            SftMaskDateTime.Enabled = True
            SftMaskDateTime.Visible = True
            SftMaskDateTime.Focus()
        Else
            SftBox1.Left = e.leftPix
            SftBox1.Top = e.topPix
            SftBox1.Width = e.widthPix
            SftBox1.Height = e.heightPix
            SftBox1.Enabled = True
            SftBox1.Visible = True
            SftBox1.Focus()
            SftBox1.Edit.SetSelection(0, -1)
            SftBox1.DropDown.Dropped = True
        End If
    End Sub

    Private Sub AxSftTree1_EditNavigating(ByVal sender As Object, ByVal e As AxSftTreeLib75._DSftTreeEvents_EditNavigatingEvent) Handles AxSftTree1.EditNavigating
        ' Process key pressed
        AxSftTree1.EditNavigate(e.key, e.shift)
    End Sub

    Private Sub AxSftTree1_EditValidate(ByVal sender As Object, ByVal e As AxSftTreeLib75._DSftTreeEvents_EditValidateEvent) Handles AxSftTree1.EditValidate
        ' Validate the new cell contents
        Dim S As String
        Dim ctrl As Control
        ctrl = e.vData
        If ctrl Is SftMaskAmount Then
            If Not SftMaskAmount.Contents.Valid() Then
                ' could validate
            End If
            S = SftMaskAmount.TextDisplay
        ElseIf ctrl Is SftMaskDateTime Then
            If Not SftMaskDateTime.Contents.Valid() Then
                MessageBox.Show("Please enter a valid date.")
                e.inputValid = False
                Exit Sub
            End If
            S = SftMaskDateTime.TextDisplay
        Else
            S = SftBox1.Edit.Text
        End If

        S = S.Trim()
        If S.Length <= 0 Then
            MessageBox.Show("Just to demonstrate data input validation, this example rejects empty cells.  Please enter some data.")
            e.inputValid = False
        End If
    End Sub

    Private Sub AxSftTree1_EditEnding(ByVal sender As Object, ByVal e As AxSftTreeLib75._DSftTreeEvents_EditEndingEvent) Handles AxSftTree1.EditEnding
        ' Save the new cell contents
        Dim ctrl As Control
        ctrl = e.vData
        If ctrl Is SftMaskAmount Then
            SftMaskAmount.Visible = False
            SftMaskAmount.Enabled = False
            If e.saveInput Then
                AxSftTree1.get_Cell(e.editIndex, e.editCol).Text = SftMaskAmount.TextDisplay
            End If
        ElseIf ctrl Is SftMaskDateTime Then
            SftMaskDateTime.Visible = False
            SftMaskDateTime.Enabled = False
            If e.saveInput Then
                AxSftTree1.get_Cell(e.editIndex, e.editCol).Text = SftMaskDateTime.TextDisplay
                AxSftTree1.get_Cell(e.editIndex, e.editCol).DataTag = SftMaskDateTime.Contents.DateTime
            End If
        Else
            SftBox1.Visible = False
            SftBox1.Enabled = False
            If e.saveInput Then
                AxSftTree1.get_Cell(e.editIndex, e.editCol).Text = SftBox1.Edit.Text
            End If
        End If
    End Sub

    Private Sub AxSftTree1_ToolTipVScroll(ByVal sender As Object, ByVal e As AxSftTreeLib75._DSftTreeEvents_ToolTipVScrollEvent) Handles AxSftTree1.ToolTipVScroll
        e.text = "Item " & e.itemIndex & " - " & e.text
    End Sub

    Private Sub SftMaskAmount_UpDownPress(ByVal sender As Object, ByVal e As AxSftMaskLib70._ISftMaskEvents_UpDownPressEvent) Handles SftMaskAmount.UpDownPress
        Dim Amount As Double
        Dim Increment As Double
        If e.counter = 0 Or e.counter > 5 Then
            Amount = Convert.ToDouble(e.field)
            Increment = 0.01
            If e.counter > 14 Then Increment = 0.1
            If e.counter > 23 Then Increment = 1
            If e.counter > 52 Then Increment = 10
            If e.up Then
                Amount = Amount + Increment
            Else
                Amount = Amount - Increment
            End If
            If Amount > 99999.99 Then Amount = 99999.99
            If Amount < -99999.99 Then Amount = -99999.99
            e.field = Amount.ToString("N2")
        End If
    End Sub
End Class

Last Updated 08/13/2020 - (email)
© 2024 Softel vdm, Inc.