Imports AxSftTreeLib70 Imports SftTreeLib70 Imports Softelvdm.OLEConvert Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows Form Designer generated code " Public Sub New() MyBase.New() 'This call is required by the Windows Form Designer. InitializeComponent() 'Add any initialization after the InitializeComponent() call End Sub 'Form overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub 'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer 'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. Public WithEvents Label1 As System.Windows.Forms.Label Public WithEvents ToolTip1 As System.Windows.Forms.ToolTip Friend WithEvents SftBox1 As AxSftBoxLib40.AxSftBox Friend WithEvents SftMaskDateTime As AxSftMaskLib60.AxSftMask Friend WithEvents SftMaskAmount As AxSftMaskLib60.AxSftMask Public WithEvents Command1 As System.Windows.Forms.Button Public WithEvents Text1 As System.Windows.Forms.TextBox Friend WithEvents AxSftTree1 As AxSftTreeLib70.AxSftTree Friend WithEvents SftHelperComponent1 As Softelvdm.OCXHelper.SftHelperComponent <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1)) Me.AxSftTree1 = New AxSftTreeLib70.AxSftTree() Me.Label1 = New System.Windows.Forms.Label() Me.ToolTip1 = New System.Windows.Forms.ToolTip(Me.components) Me.SftBox1 = New AxSftBoxLib40.AxSftBox() Me.SftMaskDateTime = New AxSftMaskLib60.AxSftMask() Me.SftMaskAmount = New AxSftMaskLib60.AxSftMask() Me.Command1 = New System.Windows.Forms.Button() Me.Text1 = New System.Windows.Forms.TextBox() Me.SftHelperComponent1 = New Softelvdm.OCXHelper.SftHelperComponent(Me.components) CType(Me.AxSftTree1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.SftBox1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.SftMaskDateTime, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.SftMaskAmount, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' 'AxSftTree1 ' Me.AxSftTree1.Location = New System.Drawing.Point(7, 39) Me.AxSftTree1.Name = "AxSftTree1" Me.AxSftTree1.OcxState = CType(resources.GetObject("AxSftTree1.OcxState"), System.Windows.Forms.AxHost.State) Me.AxSftTree1.Size = New System.Drawing.Size(489, 264) Me.AxSftTree1.TabIndex = 25 ' 'Label1 ' Me.Label1.BackColor = System.Drawing.SystemColors.Control Me.Label1.Cursor = System.Windows.Forms.Cursors.Default Me.Label1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.0!) Me.Label1.ForeColor = System.Drawing.SystemColors.ControlText Me.Label1.Location = New System.Drawing.Point(7, 7) Me.Label1.Name = "Label1" Me.Label1.RightToLeft = System.Windows.Forms.RightToLeft.No Me.Label1.Size = New System.Drawing.Size(489, 25) Me.Label1.TabIndex = 21 Me.Label1.Text = "Cell Editing with separately available ActiveX controls." ' 'SftBox1 ' Me.SftBox1.Location = New System.Drawing.Point(391, 367) Me.SftBox1.Name = "SftBox1" Me.SftBox1.OcxState = CType(resources.GetObject("SftBox1.OcxState"), System.Windows.Forms.AxHost.State) Me.SftBox1.Size = New System.Drawing.Size(192, 19) Me.SftBox1.TabIndex = 26 Me.SftBox1.Visible = False ' 'SftMaskDateTime ' Me.SftMaskDateTime.DataSource = Nothing Me.SftMaskDateTime.Location = New System.Drawing.Point(407, 399) Me.SftMaskDateTime.Name = "SftMaskDateTime" Me.SftMaskDateTime.OcxState = CType(resources.GetObject("SftMaskDateTime.OcxState"), System.Windows.Forms.AxHost.State) Me.SftMaskDateTime.Size = New System.Drawing.Size(177, 19) Me.SftMaskDateTime.TabIndex = 24 Me.SftMaskDateTime.Visible = False ' 'SftMaskAmount ' Me.SftMaskAmount.DataSource = Nothing Me.SftMaskAmount.Location = New System.Drawing.Point(407, 335) Me.SftMaskAmount.Name = "SftMaskAmount" Me.SftMaskAmount.OcxState = CType(resources.GetObject("SftMaskAmount.OcxState"), System.Windows.Forms.AxHost.State) Me.SftMaskAmount.Size = New System.Drawing.Size(177, 19) Me.SftMaskAmount.TabIndex = 23 Me.SftMaskAmount.Visible = False ' 'Command1 ' Me.Command1.BackColor = System.Drawing.SystemColors.Control Me.Command1.Cursor = System.Windows.Forms.Cursors.Default Me.Command1.DialogResult = System.Windows.Forms.DialogResult.Cancel Me.Command1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.0!) Me.Command1.ForeColor = System.Drawing.SystemColors.ControlText Me.Command1.Location = New System.Drawing.Point(503, 7) Me.Command1.Name = "Command1" Me.Command1.RightToLeft = System.Windows.Forms.RightToLeft.No Me.Command1.Size = New System.Drawing.Size(81, 25) Me.Command1.TabIndex = 20 Me.Command1.Text = "Close" ' 'Text1 ' Me.Text1.AcceptsReturn = True Me.Text1.AutoSize = False Me.Text1.BackColor = System.Drawing.SystemColors.Control Me.Text1.BorderStyle = System.Windows.Forms.BorderStyle.None Me.Text1.Cursor = System.Windows.Forms.Cursors.IBeam Me.Text1.Font = New System.Drawing.Font("Microsoft Sans Serif", 8.25!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Text1.ForeColor = System.Drawing.SystemColors.WindowText Me.Text1.Location = New System.Drawing.Point(8, 312) Me.Text1.MaxLength = 0 Me.Text1.Multiline = True Me.Text1.Name = "Text1" Me.Text1.ReadOnly = True Me.Text1.RightToLeft = System.Windows.Forms.RightToLeft.No Me.Text1.Size = New System.Drawing.Size(488, 177) Me.Text1.TabIndex = 28 Me.Text1.TabStop = False Me.Text1.Text = "" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "This sample can only be opened and modified if SftMask/OCX 6.0 and SftBox/OCX 4" & _ ".0 (demo or product) are also installed." & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "Click on the SftTree/OCX control a" & _ "nd hit F1 to access online help for SftTree/OCX 7.0." ' 'Form1 ' Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.CancelButton = Me.Command1 Me.ClientSize = New System.Drawing.Size(590, 495) Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Text1, Me.AxSftTree1, Me.Label1, Me.SftBox1, Me.SftMaskDateTime, Me.SftMaskAmount, Me.Command1}) Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog Me.Name = "Form1" Me.Text = "Softel vdm, Inc. - CellEditingII Sample" CType(Me.AxSftTree1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.SftBox1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.SftMaskDateTime, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.SftMaskAmount, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) End Sub #End Region '--locate-marker-- 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 AxSftTreeLib70._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 AxSftTreeLib70._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 AxSftTreeLib70._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 AxSftTreeLib70._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 AxSftTreeLib70._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 AxSftTreeLib70._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 AxSftTreeLib70._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 AxSftTreeLib70._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 AxSftMaskLib60._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