Imports System.Reflection Imports System.Windows.Forms Imports System.Drawing Public Class frmTreeselect Dim oetree As New clsOETree Dim Paramtype As String Dim ncol As New Collection Dim M_Selectedvalue As String Property SelectedValues As String Get Return M_Selectedvalue End Get Set(value As String) M_Selectedvalue = value End Set End Property Sub New(ByVal PType As String) ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() Me.Paramtype = PType ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. End Sub Private Sub frmTreeselect_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.TreeStruktur.BeginUpdate() Me.TreeStruktur.Nodes.Clear() Select Case Me.Paramtype Case "OESelectSingle", "OESelectMulti" Dim per As DateTime = "31.12.2099" oetree.Load_Treeview(Me.TreeStruktur, per) Case Else oetree.Load_Treeview(Me.TreeStruktur, Me.Paramtype) End Select Me.TreeStruktur.SelectedNode = Me.TreeStruktur.Nodes(0) Me.TreeStruktur.ExpandAll() Me.TreeStruktur.EndUpdate() End Sub Private Sub TreeStruktur_DoubleClick(sender As Object, e As EventArgs) Handles TreeStruktur.DoubleClick Me.SelectedValues = Me.TreeStruktur.SelectedNode.Tag If Paramtype = "OESelectSingle" Then Me.SelectedValues = Me.TreeStruktur.SelectedNode.Tag If Paramtype = "OESelectMulti" Then Me.SelectedValues = Me.TreeStruktur.SelectedNode.Tag Me.DialogResult = Windows.Forms.DialogResult.OK Me.Close() End Sub #Region "TreeStruktur" Private _prevNode As TreeNode Public SelectedBackColor As Color Public SelectedForeColor As Color Protected Sub MultiSelectFileTreeView_AfterSelect(sender As Object, e As System.Windows.Forms.TreeViewEventArgs) Handles TreeStruktur.AfterSelect Try If Paramtype = "OESelectSingle" Then Me.SelectedValues = Me.TreeStruktur.SelectedNode.Tag Exit Sub End If Dim bBoth As Boolean = ModifierKeys = (Keys.Shift Or Keys.Control) ' Dim bControl As Boolean = (ModifierKeys = Keys.Control) Dim bShift As Boolean = (ModifierKeys = Keys.Shift) If Not (bBoth OrElse bControl OrElse bShift) Then 'just a plain old selection ClearChecksRecursive(Me.TreeStruktur.Nodes) e.Node.Checked = True Me.TreeStruktur.SelectedNode = e.Node Return End If If bControl Then ' no clear, just do it e.Node.Checked = Not e.Node.Checked Me.TreeStruktur.SelectedNode = e.Node End If If bShift OrElse bBoth Then If bShift Then ClearChecksRecursive(Me.TreeStruktur.Nodes) End If Dim TopNode As New TreeNode() Dim BottomNode As New TreeNode() If _prevNode.Level <> TreeStruktur.SelectedNode.Level Then TopNode = TreeStruktur.SelectedNode.Parent.Nodes(0) BottomNode = e.Node Else TopNode = If((_prevNode.Index < TreeStruktur.SelectedNode.Index), _prevNode, TreeStruktur.SelectedNode) BottomNode = If((TreeStruktur.SelectedNode.Index > _prevNode.Index), TreeStruktur.SelectedNode, _prevNode) End If Dim x As Integer = TopNode.Index While x <= BottomNode.Index Dim n As TreeNode = TreeStruktur.SelectedNode.Parent.Nodes(x) n.Checked = True 'If n.Tag.[GetType]() <> GetType(FileInfo) Then ' n.Collapse() 'End If System.Math.Max(System.Threading.Interlocked.Increment(x), x - 1) End While Return End If Catch ex As Exception Finally End Try End Sub Private Sub TreeStruktur_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeStruktur.AfterSelect If Me.Paramtype = "OESelectSingle" Then Exit Sub Dim bBoth As Boolean = ModifierKeys = (Keys.Shift Or Keys.Control) Dim bControl As Boolean = (ModifierKeys = Keys.Control) Dim bShift As Boolean = (ModifierKeys = Keys.Shift) If Not (bBoth OrElse bControl OrElse bShift) Then 'no modifier keys, so clear all nodes and select just this one 'ClearChecksRecursive(Me.Nodes) e.Node.Checked = True Me.TreeStruktur.SelectedNode = e.Node Else Return End If End Sub Protected Sub MultiSelectFileTreeView_BeforeSelect(sender As Object, e As TreeViewCancelEventArgs) Handles TreeStruktur.BeforeSelect Try _prevNode = Me.TreeStruktur.SelectedNode Catch ex As Exception End Try End Sub Protected Sub MultiSelectFileTreeView_AfterCheck(sender As Object, e As System.Windows.Forms.TreeViewEventArgs) Handles TreeStruktur.AfterCheck SelectedBackColor = SystemColors.Highlight SelectedForeColor = SystemColors.HighlightText Try e.Node.BackColor = If((e.Node.Checked = True), SelectedBackColor, SystemColors.Window) e.Node.ForeColor = If((e.Node.Checked = True), SelectedForeColor, Me.ForeColor) If e.Node.Checked Then Dim nodeType As Type = e.Node.Tag.[GetType]() 'If nodeType = GetType(DirectoryInfo) OrElse nodeType = GetType(DriveInfo) Then ' e.Node.Expand() 'End If End If Catch ex As Exception End Try End Sub Protected Sub ClearChecksRecursive(nodes As TreeNodeCollection) Try For Each node As TreeNode In nodes node.Checked = False ClearChecksRecursive(node.Nodes) Next Catch ex As Exception Finally End Try End Sub Private Sub TreeView1_NodeMouseClick(sender As Object, e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles TreeStruktur.NodeMouseClick If e.Button = Windows.Forms.MouseButtons.Right Then TreeStruktur.SelectedNode = e.Node End If End Sub #End Region Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click If Me.Paramtype = "OESelectSingle" Then If Me.SelectedValues <> "" Then Me.DialogResult = Windows.Forms.DialogResult.OK Me.Close() Else MsgBox("Es wurde keine Organisationseinheit ausgewählt.!", MsgBoxStyle.Critical) End If Else Me.ncol.Clear() Me.SelectedValues = "" If Get_Checked_Nodes_Count(Me.TreeStruktur.Nodes) > 0 Then Dim i As Integer Dim s As String For i = 1 To ncol.Count s = ncol(i) s = Trim(s) While Len(s) < 2 s = "0" + s End While If Me.SelectedValues <> "" Then Me.SelectedValues = Me.SelectedValues + "," + s Else Me.SelectedValues = s End If Next Me.DialogResult = Windows.Forms.DialogResult.OK Me.Close() Else MsgBox("Es wurden keine Organisationseinheiten ausgewählt.", MsgBoxStyle.Critical) End If End If End Sub Public Function Get_Checked_Nodes(ByVal Nodes As TreeNodeCollection) For Each node As TreeNode In Nodes If node.Checked = True Then ncol.Add(node.Tag) If node.Nodes.Count > 0 Then Get_Sub_Nodes(node.Nodes) End If Get_Checked_Nodes(node.Nodes) Next End Function Public Function Get_Sub_Nodes(ByVal Nodes As TreeNodeCollection) For Each node As TreeNode In Nodes ncol.Add(node.Tag) If node.Nodes.Count > 0 Then Get_Sub_Nodes(node.Nodes) Get_Sub_Nodes(node.Nodes) Next End Function Public Function Get_Checked_Nodes_Count(ByVal Nodes As TreeNodeCollection) As Integer For Each node As TreeNode In Nodes If node.Checked = True Then ncol.Add(node.Tag) End If Get_Checked_Nodes(node.Nodes) Next Return ncol.Count End Function Private Sub TSBtnQuit_Click(sender As Object, e As EventArgs) Handles TSBtnQuit.Click Me.DialogResult = Windows.Forms.DialogResult.Abort Me.Close() End Sub Private Sub BeendenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BeendenToolStripMenuItem.Click TSBtnQuit_Click(sender, e) End Sub End Class