In working on the conversion of a VB6 Forms application to VB.NET (as mentioned in my last post), I have discovered many instances where Microsoft decided to keep the name (and sometimes even the associated syntax) of an element, while changing the functionality of the methods related to that element.
One such example is that of the TreeView and its TreeNodes.
In the VB6 application, the code associated with the NodeCheck event was written like this:
Private Sub tvwDataCategory_NodeCheck(ByVal Node As MSComctlLib.Node)
Dim n As Integer
If Left(Node.Key, cTagLength) = cDataTypeTag Then
Node.ForeColor = DefaultForeColor
If Node.Children <> 0 Then
n = Node.Child.Index
While n <> Node.Child.LastSibling.Index
If Node.Checked Then
tvwDataCategory.Nodes(n).Checked = True
Else
tvwDataCategory.Nodes(n).Checked = False
End If
n = tvwDataCategory.Nodes(n).Next.Index
Wend
If Node.Checked Then
tvwDataCategory.Nodes(n).Checked = True
Else
tvwDataCategory.Nodes(n).Checked = False
End If
End If
Else
Call FormatChecks
End If
End Sub
Even after running the VB6 code through the Visual Studio upgrade wizard, the resulting code did not work as it did before. The NodeCheck event in VB6 has become the AfterCheck event in .NET, and the new code should read something like this:
Private Sub tvwDataCategory_AfterCheck(ByVal eventSender As System.Object, ByVal eventArgs As System.Windows.Forms.TreeViewEventArgs) Handles tvwDataCategory.AfterCheck
Dim Node As System.Windows.Forms.TreeNode = eventArgs.Node
Dim n As Integer
If VB.Left(Node.Name, cTagLength) = cDataTypeTag Then
Node.ForeColor = DefaultForeColor
Dim nNodes As TreeNodeCollection = eventArgs.Node.Nodes
For Each nNode As TreeNode In nNodes
If nNodes.Count = 0 Then
If nNode.Checked Then
tvwDataCategory.Nodes.Item(n).Checked = True
Else
tvwDataCategory.Nodes.Item(n).Checked = False
End If
End If
Next
Else
Call FormatChecks()
End If
End Sub
I am still working to verify that this will traverse the entire node and all child branches. As the FirstSibling and LastSibling functions have been made obsolete, new code must be written to duplicate that functionality. The adventure continues…
29.752554-95.370401
Like this:
Like Loading...