Imports System.Data.SqlClient Imports System.Data.SqlTypes Imports System.Reflection Public Class frmUebersicht Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer #Region "Deklarationen" Dim Uebersicht As New clsUebersicht Dim KeyValue As Integer = -1 Dim TargetDBObject As String Dim WithEvents evh As _Generic_Event_Handler.Generic_Event_Handler = Globals.Generic_Event_Handler Dim Datenklasse As New _DataClass.DataClass Dim sec As New Utils.MySecurity Dim Change_Keys As Boolean = False Dim WHandler As New clsWindowHandling Dim WithEvents fneuebeziehung As _AllgMainObjekte.frmSetNeueBeziehung Dim allNodes As List(Of TreeNode) = New List(Of TreeNode)() Dim OnTreeRefresh As Boolean = False Dim mymsg As New Utils.MyMessage Dim Active_Node As TreeNode #End Region #Region "Formular" Sub New() ' Dieser Aufruf ist für den Designer erforderlich. InitializeComponent() Datenklasse.Mitarbeiternr = Globals.clsmitarbeiter.iMitarbeiternr.Value Datenklasse.ConnectionString = Globals.sConnectionString ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu. End Sub Sub New(Optional ByVal Keyvalue As Integer = -1) InitializeComponent() Me.KeyValue = Keyvalue Datenklasse.Mitarbeiternr = Globals.clsmitarbeiter.iMitarbeiternr.Value Datenklasse.ConnectionString = Globals.sConnectionString End Sub Private Sub frmUebersicht_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing If AllgMainObjekte1.isDirty Then If MsgBox("Daten wurden verändert. Wollen Sie diese speichern?", MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Me.OnTreeRefresh = True AllgMainObjekte1.Save_Data(False) Me.OnTreeRefresh = False Else Me.AllgMainObjekte1.isDirty = False End If End If End Sub Private Sub frmUebersicht_Load(sender As Object, e As EventArgs) Handles MyBase.Load Refresh_Tree(Me.KeyValue) sec.Set_Form_Security(Me) If Me.tsbtnReadonly.Enabled = False Then Me.TreeStruktur.AllowDrop = False End If Me.AllgMainObjekte1.ConnectionFilename = Globals.ConnectionFileName Me.WHandler.get_windowsize(1) If WHandler.Width > 0 Then Me.Width = WHandler.Width If WHandler.height > 0 Then Me.Height = WHandler.height Me.WHandler.get_windowsize(11) If WHandler.Width > 0 Then Me.SplitContainer1.SplitterDistance = WHandler.Width End Sub Sub Refresh_Tree(ByVal Keyvalue As Integer, Optional NodeCollection As TreeNodeCollection = Nothing) OnTreeRefresh = True If Keyvalue = -1 Then Me.Uebersicht.treedata_for_search.Rows.Clear() Me.Uebersicht.treedata_for_search.Columns.Clear() End If Me.Cursor = Cursors.WaitCursor Me.TreeStruktur.BeginUpdate() Try Me.TreeStruktur.Nodes.Clear() Catch End Try Uebersicht.Load_Treeview(Me.TreeStruktur) Dim i As Integer Try For i = 0 To allNodes.Count - 1 If allNodes(i).IsExpanded Then If Not NodeCollection Is Nothing Then TreeStruktur.SelectedNode = Me.Uebersicht.FindNode(NodeCollection, allNodes(i).Tag, allNodes(i).Tag) Else TreeStruktur.SelectedNode = Me.Uebersicht.FindNode(Me.TreeStruktur.Nodes, allNodes(i).Tag, allNodes(i).Tag) End If TreeStruktur.SelectedNode.Expand() End If Next Catch ex As Exception End Try OnTreeRefresh = False If Keyvalue <> -1 Then If Not NodeCollection Is Nothing Then Me.TreeStruktur.SelectedNode = Me.Uebersicht.FindNode(NodeCollection, Keyvalue, Keyvalue) Else Me.TreeStruktur.SelectedNode = Me.Uebersicht.FindNode(Me.TreeStruktur.Nodes, Keyvalue, Keyvalue) End If End If Me.TreeStruktur.EndUpdate() Me.TreeStruktur.SelectedNode = Me.TreeStruktur.SelectedNode Try Me.TreeStruktur.SelectedNode.EnsureVisible() Catch End Try Me.Cursor = Cursors.Default End Sub Protected Function Get_All_Expanded_Nodes() If OnTreeRefresh = True Then Exit Function allNodes.Clear() Dim aln As List(Of TreeNode) aln = GetAllNodes() Dim i As Integer For i = 0 To aln.Count - 1 If aln(i).IsExpanded Then allNodes.Add(aln(i)) Next aln.Clear() aln = Nothing End Function Protected Function GetAllNodes() As List(Of TreeNode) Dim allNodes As List(Of TreeNode) = New List(Of TreeNode)() ' start recursion for each root node of the treeview For i As Integer = 0 To TreeStruktur.Nodes.Count - 1 GetAllNodes(TreeStruktur.Nodes(i), allNodes) Next Return allNodes End Function Protected Sub GetAllNodes(ByVal subRoot As TreeNode, ByVal allNodes As List(Of TreeNode)) ' check for null (this can be removed since within th If (subRoot Is Nothing) Then Exit Sub End If ' add subroot allNodes.Add(subRoot) ' add all it's children For i As Integer = 0 To subRoot.Nodes.Count - 1 GetAllNodes(subRoot.Nodes(i), allNodes) Next End Sub #End Region #Region "Toolbar/Menu" Private Sub TSBtnQuit_Click(sender As Object, e As EventArgs) Handles TSBtnQuit.Click Me.Close() End Sub Private Sub SchliessenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SchliessenToolStripMenuItem.Click Me.TSBtnQuit_Click(sender, e) End Sub Private Sub TSBtnSuche_Click(sender As Object, e As EventArgs) Handles TSBtnSuche.Click If AllgMainObjekte1.isDirty Then If MsgBox("Daten wurden verändert. Wollen Sie diese speichern?", MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Me.OnTreeRefresh = True AllgMainObjekte1.Save_Data(False) Me.OnTreeRefresh = False Else Me.AllgMainObjekte1.isDirty = False End If End If Uebersicht.Init_Search() Me.TreeStruktur.SelectedNode = Uebersicht.SearchNode(Me.TreeStruktur, Trim(Me.ToolStriptxtSuche.Text)) End Sub Private Sub TSBtnNext_Click(sender As Object, e As EventArgs) Handles TSBtnNext.Click If AllgMainObjekte1.isDirty Then If MsgBox("Daten wurden verändert. Wollen Sie diese speichern?", MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Me.OnTreeRefresh = True AllgMainObjekte1.Save_Data(False) Me.OnTreeRefresh = False Else Me.AllgMainObjekte1.isDirty = False End If End If Me.TreeStruktur.SelectedNode = Uebersicht.FindNextNode(Me.TreeStruktur) End Sub Private Sub ToolStriptxtSuche_KeyDown(sender As Object, e As KeyEventArgs) Handles ToolStriptxtSuche.KeyDown If AllgMainObjekte1.isDirty Then If MsgBox("Daten wurden verändert. Wollen Sie diese speichern?", MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Me.OnTreeRefresh = True AllgMainObjekte1.Save_Data(False) Me.OnTreeRefresh = False Else Me.AllgMainObjekte1.isDirty = False End If End If If e.KeyCode = Keys.Enter Then TSBtnSuche_Click(sender, e) End If End Sub Private Sub TSBtnPrevious_Click(sender As Object, e As EventArgs) Handles TSBtnPrevious.Click If AllgMainObjekte1.isDirty Then If MsgBox("Daten wurden verändert. Wollen Sie diese speichern?", MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Me.OnTreeRefresh = True AllgMainObjekte1.Save_Data(False) Me.OnTreeRefresh = False Else Me.AllgMainObjekte1.isDirty = False End If End If Me.TreeStruktur.SelectedNode = Uebersicht.FindPrevNode(Me.TreeStruktur) End Sub Private Sub TSBtnFirst_Click(sender As Object, e As EventArgs) Handles TSBtnFirst.Click If AllgMainObjekte1.isDirty Then If MsgBox("Daten wurden verändert. Wollen Sie diese speichern?", MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then AllgMainObjekte1.Save_Data() End If End If Me.TreeStruktur.SelectedNode = Uebersicht.FindFirst(Me.TreeStruktur) End Sub Private Sub TSBtnLast_Click(sender As Object, e As EventArgs) Handles TSBtnLast.Click If AllgMainObjekte1.isDirty Then If MsgBox("Daten wurden verändert. Wollen Sie diese speichern?", MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Me.OnTreeRefresh = True AllgMainObjekte1.Save_Data(False) Me.OnTreeRefresh = False Else Me.AllgMainObjekte1.isDirty = False End If End If Me.TreeStruktur.SelectedNode = Uebersicht.FindLastNode(Me.TreeStruktur) End Sub Private Sub TSBtnFilterAufheben_Click(sender As Object, e As EventArgs) Handles TSBtnFilterAufheben.Click If AllgMainObjekte1.isDirty Then If MsgBox("Daten wurden verändert. Wollen Sie diese speichern?", MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Me.OnTreeRefresh = True AllgMainObjekte1.Save_Data(False) Me.OnTreeRefresh = False Else Me.AllgMainObjekte1.isDirty = False End If End If Me.ToolStriptxtSuche.Text = "" Uebersicht.Init_Search() End Sub #End Region #Region "TreeStruktur" Private _prevNode As TreeNode Public SelectedBackColor As Color Public SelectedForeColor As Color Private Sub TreeStruktur_AfterCollapse(sender As Object, e As TreeViewEventArgs) Handles TreeStruktur.AfterCollapse Get_All_Expanded_Nodes() End Sub Private Sub TreeStruktur_AfterExpand(sender As Object, e As TreeViewEventArgs) Handles TreeStruktur.AfterExpand Get_All_Expanded_Nodes() End Sub Protected Sub MultiSelectFileTreeView_AfterSelect(sender As Object, e As System.Windows.Forms.TreeViewEventArgs) Handles TreeStruktur.AfterSelect If OnTreeRefresh Then Exit Sub Try Me.TreeStruktur.BeginUpdate() 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 Me.TreeStruktur.EndUpdate() Catch ex As Exception Finally Me.TreeStruktur.EndUpdate() End Try End Sub Private Sub TreeStruktur_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeStruktur.AfterSelect If OnTreeRefresh Then Exit Sub If AllgMainObjekte1.isDirty Then If MsgBox("Daten wurden verändert. Wollen Sie diese speichern?", MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Me.OnTreeRefresh = True AllgMainObjekte1.Save_Data(True) Me.OnTreeRefresh = False Else Me.AllgMainObjekte1.isDirty = False End If 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 '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 'Me.TreeStruktur.BeginUpdate() Me.SuspendLayout() Me.AllgMainObjekte1.Generic_Event_Handler = Globals.Generic_Event_Handler Me.Panel2.Visible = True Me.Panel2.Dock = DockStyle.Fill Me.AllgMainObjekte1.ConnectionFilename = Globals.ConnectionFileName Me.AllgMainObjekte1.ConnectionString = Globals.sConnectionString Me.AllgMainObjekte1.TempFilePath = Globals.clsapplication.sTmp_filepath.Value Me.AllgMainObjekte1.Mitarbeiternr = Globals.clsmitarbeiter.iMitarbeiternr.Value Me.AllgMainObjekte1.Type = Datenklasse.Get_SelectionTypeText(Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, Me.TreeStruktur.SelectedNode)) Me.AllgMainObjekte1.KeyValue = Me.TreeStruktur.SelectedNode.Tag Me.ResumeLayout() 'Me.TreeStruktur.EndUpdate() Exit Sub End Sub Protected Sub MultiSelectFileTreeView_BeforeSelect(sender As Object, e As TreeViewCancelEventArgs) Handles TreeStruktur.BeforeSelect Try If Me.AllgMainObjekte1.isDirty Then 'If MsgBox("Daten wurden verändert. Wollen Sie diese speichern?", MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then ' OnTreeRefresh = True ' AllgMainObjekte1.Save_Data(False) ' OnTreeRefresh = False 'End If End If _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 TreeStruktur_DragDrop(sender As Object, e As DragEventArgs) Handles TreeStruktur.DragDrop If e.Data.GetDataPresent("C1.Win.C1TrueDBGrid.C1TrueDBGrid", True) = True Then Dim Grid As New C1.Win.C1TrueDBGrid.C1TrueDBGrid Grid = CType(e.Data.GetData("C1.Win.C1TrueDBGrid.C1TrueDBGrid"), C1.Win.C1TrueDBGrid.C1TrueDBGrid) e.Effect = DragDropEffects.None Dim selectedTreeview As TreeView = CType(sender, TreeView) Dim pt As Point = CType(sender, TreeView).PointToClient(New Point(e.X, e.Y)) Dim targetNode As TreeNode = selectedTreeview.GetNodeAt(pt) 'AllgMainObjekte1.Update_Beziehung(targetNode.Tag, Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, targetNode), Grid) End If If e.Data.GetDataPresent("System.Windows.Forms.TreeNode", True) Then Dim cnodes As New Collection If evh.Datacolleation.Count > 0 Then ncol = evh.Datacolleation Else Globals.ncol.Clear() Get_Checked_Nodes_root(Me.TreeStruktur.Nodes) End If Dim DestinationNode As TreeNode Dim SourceNode As TreeNode SourceNode = CType(e.Data.GetData("System.Windows.Forms.TreeNode"), TreeNode) Dim pt As Point pt = Me.TreeStruktur.PointToClient(New Point(e.X, e.Y)) DestinationNode = TreeStruktur.GetNodeAt(pt) If SourceNode.Tag = DestinationNode.Tag Then MsgBox("Ein Knoten kann nicht auf sich selber zeigen - Funktion wird abgebrochen") Exit Sub End If If check_destination(SourceNode, DestinationNode) = False Then MsgBox("Ein Knoten kann nicht auf ein Unterknoten in der eigenen Unterstruktur verschoben wrden - Funktion wird abgebrochen") Exit Sub End If Dim SelTag As Integer For i = 1 To Globals.ncol.Count SelTag = Globals.ncol.Item(i) Dim DBOBjektname = Uebersicht.Get_DBObjektname(Me.Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, DestinationNode)) Dim DBObjekt As New Object Datenklasse.CreateNew(DBOBjektname, DBObjekt) 'DBObjekt.get_data(SourceNode.Tag) DBObjekt.get_data(SelTag) DBObjekt.iparentid = New SqlInt32(CType(DestinationNode.Tag, Int32)) DBObjekt.save_data() DBObjekt.dispose() Next Me.Get_All_Expanded_Nodes() evh.Fire_Struktur_Changed(SourceNode.Tag) e.Effect = DragDropEffects.None evh.Datacolleation.Clear() End If End Sub Private Function check_destination(ByVal stn As TreeNode, ByVal dtn As TreeNode) As Boolean Dim ptn As New TreeNode Try ptn = dtn For i As Integer = 1 To 100 If ptn.Tag = stn.Tag Then Return False ptn = ptn.Parent Next Return True Catch ex As Exception Return True End Try End Function Private Sub TreeView1_NodeMouseClick(sender As Object, e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles TreeStruktur.NodeMouseClick If e.Button = Windows.Forms.MouseButtons.Right Then Globals.ncol.Clear() Me.Get_Checked_Nodes(Me.TreeStruktur.Nodes) If Globals.ncol.Count > 1 Then Exit Sub End If TreeStruktur.SelectedNode = e.Node Active_Node = e.Node If e.Button = Windows.Forms.MouseButtons.Right Then TreeStruktur.SelectedNode = e.Node End If End Sub Private Sub TreeStruktur_DragEnter(sender As Object, e As DragEventArgs) Handles TreeStruktur.DragEnter If e.Data.GetDataPresent("C1.Win.C1TrueDBGrid.C1TrueDBGrid", True) = True Then 'TreeNode found allow move effect e.Effect = DragDropEffects.Move Else 'No TreeNode found, prevent move If e.Data.GetDataPresent("System.Windows.Forms.TreeNode", True) Then 'TreeNode found allow move effect e.Effect = DragDropEffects.Move Else 'No TreeNode found, prevent move e.Effect = DragDropEffects.None End If End If If e.Data.GetDataPresent("System.Windows.Forms.TreeNode", True) Then Dim DestinationNode As TreeNode Dim SourceNode As TreeNode SourceNode = CType(e.Data.GetData("System.Windows.Forms.TreeNode"), TreeNode) Me.TreeStruktur.SelectedNode = SourceNode Dim pt As Point pt = Me.TreeStruktur.PointToClient(New Point(e.X, e.Y)) DestinationNode = TreeStruktur.GetNodeAt(pt) Try If Me.Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, DestinationNode) = Me.Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, SourceNode) Then 'TreeNode found allow move effect e.Effect = DragDropEffects.Move Else 'No TreeNode found, prevent move e.Effect = DragDropEffects.None End If Catch ex As Exception e.Effect = DragDropEffects.None End Try End If End Sub Private Sub changeNodeBackColor(ByVal backColor As Color, Optional ByVal node As TreeNode = Nothing) TreeStruktur.BeginUpdate() Try If lastnode IsNot Nothing Then Dim FS As New Font("Microsoft Sans Serif; 8.25pt", 8.25, FontStyle.Regular) lastnode.NodeFont = FS FS = Nothing End If 'lastnode.BackColor = node.BackColor Catch End Try If node IsNot Nothing Then Dim FS As New Font("Microsoft Sans Serif; 8.25pt", 8.25, FontStyle.Bold) node.NodeFont = FS FS = Nothing '.BackColor = backColor lastnode = node End If ' For Each n As TreeNode In If(node IsNot Nothing, node.Nodes, TreeStruktur.Nodes) ' changeNodeBackColor(backColor, n) ' ' Next TreeStruktur.EndUpdate() End Sub Dim lastnode As New TreeNode Private Sub TreeStruktur_DragOver(sender As Object, e As DragEventArgs) Handles TreeStruktur.DragOver If e.Data.GetDataPresent("C1.Win.C1TrueDBGrid.C1TrueDBGrid", True) = True Then e.Effect = DragDropEffects.Move Else If e.Data.GetDataPresent("System.Windows.Forms.TreeNode", True) Then Dim DestinationNode As TreeNode Dim SourceNode As TreeNode SourceNode = CType(e.Data.GetData("System.Windows.Forms.TreeNode"), TreeNode) Dim pt As Point pt = Me.TreeStruktur.PointToClient(New Point(e.X, e.Y)) DestinationNode = TreeStruktur.GetNodeAt(pt) 'changeNodeBackColor(Color.Blue, DestinationNode) Try If Me.Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, DestinationNode) = Me.Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, SourceNode) And _ SourceNode.Tag <> DestinationNode.Tag Then 'TreeNode found allow move effect e.Effect = DragDropEffects.Move Else 'No TreeNode found, prevent move e.Effect = DragDropEffects.None End If Catch ex As Exception e.Effect = DragDropEffects.None End Try Const ScrollRegion As Single = 20 Dim pt1 As Point = TreeStruktur.PointToClient(Cursor.Position) If (pt1.Y + ScrollRegion) > TreeStruktur.Height Then SendMessage(TreeStruktur.Handle, 277&, 1&, vbNull) ElseIf (pt1.Y) < TreeStruktur.Top + ScrollRegion Then SendMessage(TreeStruktur.Handle, 277&, 0&, vbNull) End If End If End If End Sub Private Sub TreeStruktur_ItemDrag(sender As Object, e As ItemDragEventArgs) Handles TreeStruktur.ItemDrag DoDragDrop(e.Item, DragDropEffects.Move) End Sub #End Region #Region "AllgMainObjekte" Private Sub BeA_FunktionDetail1_C1Bezeihungen_DoubleClicked(keyvalue As Integer, Typ As String, NewWindow As Boolean) Handles AllgMainObjekte1.Beziehungen_DoubleClicked If NewWindow = False Then Me.TreeStruktur.SelectedNode = Me.Uebersicht.FindNode(Me.TreeStruktur.Nodes, keyvalue, keyvalue) Else Dim f As New frmUebersicht(keyvalue) f.MdiParent = Me.MdiParent f.Show() End If End Sub Private Sub AllgMainObjekte1_DragDrop(sender As Object, e As DragEventArgs) Handles AllgMainObjekte1.DragDrop '20130402_Sequenznr des Root-Nodes auslesen und als SequenzNr übergeben Dim DBOBjektname = Uebersicht.Get_DBObjektname(Me.Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, Me.TreeStruktur.SelectedNode)) Dim DBObjekt As New Object Datenklasse.CreateNew(DBOBjektname, DBObjekt) DBObjekt.get_data(Me.AllgMainObjekte1.KeyValue) Dim sequenznr As Integer = DBObjekt.isequenz.value DBObjekt.dispose() Me.AllgMainObjekte1.Add_New_Beziehung(newnode.Tag, Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, newnode), newnode.Text, TargetDBObject, Change_Keys, sequenznr) End Sub Private Sub AllgMainObjekte1_DragEnter(sender As Object, e As DragEventArgs) Handles AllgMainObjekte1.DragEnter 'See if there is a TreeNode being dragged If e.Data.GetDataPresent("System.Windows.Forms.TreeNode", True) Then 'TreeNode found allow move effect e.Effect = DragDropEffects.Move Else 'No TreeNode found, prevent move e.Effect = DragDropEffects.None End If End Sub Dim newnode As New TreeNode Private Sub AllgMainObjekte1_DragOver(sender As Object, e As DragEventArgs) Handles AllgMainObjekte1.DragOver If e.Data.GetDataPresent("System.Windows.Forms.TreeNode", True) = False Then Exit Sub Dim DestinationNode As TreeNode Dim pt As Point pt = Me.TreeStruktur.PointToClient(New Point(e.X, e.Y)) DestinationNode = TreeStruktur.GetNodeAt(pt) newnode = CType(e.Data.GetData("System.Windows.Forms.TreeNode"), TreeNode) Dim type1 As Integer Dim type2 As Integer type1 = Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, newnode) type2 = Datenklasse.Get_Selectiontype(Me.AllgMainObjekte1.Type) For Each dr As DataRow In Globals.Objekt_Beziehung.Rows If dr.Item("Objekt1") = type1 And dr.Item("Objekt2") = type2 And dr.Item("Aktiv") = True Then Me.TargetDBObject = dr.Item("Objektname") Me.Change_Keys = dr.Item("Key_Umdrehen") e.Effect = DragDropEffects.Move Exit Sub End If Next e.Effect = DragDropEffects.None Exit Sub End Sub #End Region #Region "Datenbank" #End Region #Region "EVH-Ereignisse" Private Sub evh_MainObject_Created(Keyvalue As Integer, Parentid As Integer, ByVal parentform As Object) Handles evh.MainObject_Created Try If parentform.handle = Me.Handle Then Refresh_Tree(-1) Dim tn As New TreeNode tn = Uebersicht.FindNode(Me.TreeStruktur.Nodes, Parentid, "") Me.TreeStruktur.SelectedNode = Uebersicht.FindNode(tn.Nodes, Keyvalue, "") Else Dim sn As Integer = Me.TreeStruktur.SelectedNode.Tag Dim PN As Integer = Me.TreeStruktur.SelectedNode.Parent.Tag Refresh_Tree(-1) Dim tn As New TreeNode tn = Uebersicht.FindNode(Me.TreeStruktur.Nodes, PN, "") Me.TreeStruktur.SelectedNode = Uebersicht.FindNode(tn.Nodes, sn, "") End If Catch End Try End Sub Private Sub evh_MainObject_Saved(ByVal Keyvalue As Integer, ByVal Parentid As Integer) Handles evh.MainObject_Saved Try If Me.TreeStruktur.SelectedNode.Tag = Keyvalue Then 'gaga Dim DBObjekt As New Object Dim s As String s = Datenklasse.Get_SelectionTypeText(Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, Active_Node)) Datenklasse.CreateNew("_DataClass.db." + s, DBObjekt) DBObjekt.get_data(Keyvalue) Active_Node.Text = DBObjekt.sbezeichnung.ToString Me.TreeStruktur.SelectedNode = Active_Node Me.SortTreeNodeCollection(Active_Node.Parent.Nodes) Me.AllgMainObjekte1.Refresh_Beziehungen() 'Refresh_Tree(-1) 'Dim tn As New TreeNode 'tn = Uebersicht.FindNode(Me.TreeStruktur.Nodes, Parentid, "") 'Me.TreeStruktur.SelectedNode = Uebersicht.FindNode(tn.Nodes, Keyvalue, "") 'Me.AllgMainObjekte1.Refresh_Beziehungen() Else Dim ntn As TreeNode Dim DBObjekt As New Object ntn = Uebersicht.FindNode(Me.TreeStruktur.Nodes, Keyvalue, "") Try Dim s As String s = Datenklasse.Get_SelectionTypeText(Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, ntn)) Datenklasse.CreateNew("_DataClass.db." + s, DBObjekt) DBObjekt.get_data(Keyvalue) ntn.Text = DBObjekt.sbezeichnung.ToString Me.SortTreeNodeCollection(ntn.Parent.Nodes) Exit Sub Catch ex As Exception End Try Dim sn As Integer = Me.TreeStruktur.SelectedNode.Tag Dim PN As Integer = Me.TreeStruktur.SelectedNode.Parent.Tag Refresh_Tree(-1) Dim tn As New TreeNode tn = Uebersicht.FindNode(Me.TreeStruktur.Nodes, PN, "") Me.TreeStruktur.SelectedNode = Uebersicht.FindNode(tn.Nodes, sn, "") Me.AllgMainObjekte1.Refresh_Beziehungen() End If Catch End Try Exit Sub 'Dim tn As New TreeNode 'tn = Uebersicht.FindNode(Me.TreeStruktur.Nodes, Parentid, "") 'Me.TreeStruktur.SelectedNode = Uebersicht.FindNode(tn.Nodes, Keyvalue, "") 'Me.TreeStruktur.SelectedNode.Text= 'Dim tn As New TreeNode 'tn = Uebersicht.FindNode(Me.TreeStruktur.Nodes, Keyvalue, "") 'If tn Is Nothing Then ' Me.Refresh_Tree(Me.AllgMainObjekte1.KeyValue) ' Me.AllgMainObjekte1.Refresh_Details() ' Exit Sub 'Else ' tn.Text = Bezeichnung ' If tn.Tag = Me.AllgMainObjekte1.KeyValue Then Me.AllgMainObjekte1.Refresh_Details() 'End If End Sub Private Sub evh_Strucktur_Changed(ByVal keyvalue As Integer, ByVal treehanlde As Integer) Handles evh.Strucktur_Changed Try If keyvalue = -1 Or keyvalue <> TreeStruktur.SelectedNode.Tag Then Refresh_Tree(Me.TreeStruktur.SelectedNode.Tag) Else Refresh_Tree(keyvalue) End If Catch Refresh_Tree(keyvalue) End Try End Sub Private Sub evh_MainObject_Deleted(ByVal keyvalue As Integer, ByVal parentid As Integer) Handles evh.MainObject_Deleted Try Dim tn1 As New TreeNode tn1 = Uebersicht.FindNode(Me.TreeStruktur.Nodes, keyvalue, "") Try If Globals.Treehandle <> Me.TreeStruktur.Handle Then Try Dim tn2 As New TreeNode tn2 = Me.TreeStruktur.SelectedNode Me.TreeStruktur.Nodes.Remove(tn1) Me.TreeStruktur.SelectedNode = tn2 tn2 = Nothing Catch End Try Else Delete_Childs(keyvalue) Me.TreeStruktur.Nodes.Remove(tn1) End If Exit Sub Catch ex As Exception Exit Sub End Try Catch ex As Exception End Try Try Dim sn As Integer = Me.TreeStruktur.SelectedNode.Tag Dim PN As Integer = Me.TreeStruktur.SelectedNode.Parent.Tag Delete_Childs(keyvalue) If onDelete Then Exit Sub Try If sn = keyvalue Then Me.Refresh_Tree(parentid) Try Me.TreeStruktur.SelectedNode.Expand() Catch End Try Else Refresh_Tree(-1) Dim tn As New TreeNode tn = Uebersicht.FindNode(Me.TreeStruktur.Nodes, PN, "") Me.TreeStruktur.SelectedNode = Uebersicht.FindNode(tn.Nodes, sn, "") End If Catch End Try Catch ex As Exception End Try End Sub Private Sub Delete_Childs(ByVal keyvalue As Integer) Try Dim DBOBjektname = Uebersicht.Get_DBObjektname(Me.Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, Me.TreeStruktur.SelectedNode)) Dim tn As New TreeNode tn = Uebersicht.FindNode(Me.TreeStruktur.Nodes, keyvalue, "") If Not tn Is Nothing Then ncol.Clear() Me.Get_Sub_Nodes(tn.Nodes) Dim i As Integer For i = 1 To ncol.Count Me.TreeStruktur.SelectedNode = Uebersicht.FindNode(Me.TreeStruktur.Nodes, ncol.Item(i), "") Try Dim DBObjekt As New Object Datenklasse.CreateNew(DBOBjektname, DBObjekt) DBObjekt.get_data(Me.TreeStruktur.SelectedNode.Tag) DBObjekt.delete_data() DBObjekt.dispose() Application.DoEvents() Catch End Try Next End If Catch ex As Exception MsgBox(ex.Message) End Try End Sub #End Region Private Sub KnotenÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles KnotenÖffnenToolStripMenuItem.Click Try Me.TreeStruktur.SelectedNode.ExpandAll() Me.TreeStruktur.SelectedNode.EnsureVisible() Catch ex As Exception End Try End Sub Private Sub KnotenSchliessenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles KnotenSchliessenToolStripMenuItem.Click Try Me.TreeStruktur.SelectedNode.Collapse() Me.TreeStruktur.SelectedNode.EnsureVisible() Catch ex As Exception End Try End Sub Private Sub ToolStripButton1_Click(sender As Object, e As EventArgs) Handles ToolStripButton1.Click If AllgMainObjekte1.isDirty Then If MsgBox("Daten wurden verändert. Wollen Sie diese speichern?", MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then Me.OnTreeRefresh = True AllgMainObjekte1.Save_Data(False) Me.OnTreeRefresh = False Else Me.AllgMainObjekte1.isDirty = False End If End If Dim f As New frmSuche f.SuchData = Uebersicht.treedata_for_search 'f.SuchTree = Me.TreeStruktur f.MdiParent = Me.MdiParent f.txtSuchbegriff.Text = Trim(ToolStriptxtSuche.Text) f.Show() End Sub Public Function Get_Checked_Nodes_root(ByVal Nodes As TreeNodeCollection) For Each node As TreeNode In Nodes If node.Checked = True Then Globals.ncol.Add(node.Tag) End If Get_Checked_Nodes_root(node.Nodes) Next End Function Public Function Get_Checked_Nodes(ByVal Nodes As TreeNodeCollection) For Each node As TreeNode In Nodes If node.Checked = True Then Globals.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 Globals.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 Globals.ncol.Add(node.Tag) End If Get_Checked_Nodes(node.Nodes) Next Return Globals.ncol.Count End Function Private Sub NeuesElementToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NeuesElementToolStripMenuItem.Click Me.AllgMainObjekte1.Add_Entry(Me.TreeStruktur.SelectedNode.Tag) End Sub Dim OnDelete As Boolean = False Private Sub ElementLöschenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ElementLöschenToolStripMenuItem.Click Globals.Treehandle = Me.TreeStruktur.Handle Dim sn As Integer = Me.TreeStruktur.SelectedNode.Parent.Tag Dim cn As New Collection For i = 1 To Globals.ncol.Count cn.Add(ncol.Item(i)) Next If cn.Count > 1 Then If mymsg.Show_MessageYesNo(4) <> MsgBoxResult.Yes Then cn = Nothing Exit Sub End If End If For i = 1 To cn.Count Me.TreeStruktur.SelectedNode = Uebersicht.FindNode(Me.TreeStruktur.Nodes, cn.Item(i), "") Try If cn.Count > 1 Then Me.OnDelete = True Me.AllgMainObjekte1.Delete_Entry(Me.TreeStruktur.SelectedNode.Tag, Me.TreeStruktur.SelectedNode.Parent.Tag, False) Me.OnDelete = False Else Me.AllgMainObjekte1.Delete_Entry(Me.TreeStruktur.SelectedNode.Tag, Me.TreeStruktur.SelectedNode.Parent.Tag, True) End If Catch ex As Exception Finally End Try Next cn = Nothing Me.Uebersicht.treedata_for_search.Rows.Clear() Me.Uebersicht.treedata_for_search.Columns.Clear() For Each dr As DataRow In Globals.Objekt.Rows Uebersicht.Load_Treedata(dr.Item("Bezeichnung")) Next Globals.Treehandle = 0 'Me.Refresh_Tree(sn, Nothing) ' Dim tn As New TreeNode ' tn = Uebersicht.FindNode(Me.TreeStruktur.Nodes, sn, "") ' Me.TreeStruktur.SelectedNode = tn 'Me.AllgMainObjekte1.Delete_Entry(Me.TreeStruktur.SelectedNode.Tag, Me.TreeStruktur.SelectedNode.Parent.Tag) 'Me.Uebersicht.treedata_for_search.Rows.Clear() 'Me.Uebersicht.treedata_for_search.Columns.Clear() 'Me.Refresh_Tree(sn, Nothing) 'Try ' Me.TreeStruktur.SelectedNode.ExpandAll() ' Me.TreeStruktur.SelectedNode.EnsureVisible() 'Catch ex As Exception 'End Try End Sub Private Sub ctxMenuTree_Opening(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles ctxMenuTree.Opening If Me.TreeStruktur.SelectedNode.Tag < 0 Then Me.NeuesElementToolStripMenuItem.Enabled = True Me.ElementLöschenToolStripMenuItem.Enabled = False Else Me.NeuesElementToolStripMenuItem.Enabled = True Me.ElementLöschenToolStripMenuItem.Enabled = True End If Globals.ncol.Clear() If Get_Checked_Nodes_Count(Me.TreeStruktur.Nodes) > 1 Then Me.ElementLöschenToolStripMenuItem.Enabled = False End If Dim s As String s = Datenklasse.Get_SelectionTypeText(Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, Me.TreeStruktur.SelectedNode)) If s = "Berechtigung" Or s = "Plattform" Or s = "Server" Then Me.Sync.Enabled = True Else Me.Sync.Enabled = False If s = "Personal" Or s = "Funktionstelle" Then Me.NeueBeziehungErstellenToolStripMenuItem.Visible = True Else Me.NeueBeziehungErstellenToolStripMenuItem.Visible = False Try If sec.Check_DataObjectReadonly(Datenklasse.Get_SelectionTypeText(Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, Me.TreeStruktur.SelectedNode))) Then Me.NeuesElementToolStripMenuItem.Enabled = False Me.ElementLöschenToolStripMenuItem.Enabled = False Else Me.NeuesElementToolStripMenuItem.Enabled = True Me.ElementLöschenToolStripMenuItem.Enabled = True End If Catch End Try End Sub Private Sub TreeStruktur_DragLeave(sender As Object, e As EventArgs) Handles TreeStruktur.DragLeave ncol.Clear() Get_Checked_Nodes_root(Me.TreeStruktur.Nodes) If ncol.Count > 0 Then evh.Datacolleation = ncol End Sub Private Sub ExportExcelToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExportExcelToolStripMenuItem.Click Dim f As New frmFortschritt f.Show() Dim ds As New DataSet ds.Tables.Clear() ncol.Clear() Get_Checked_Nodes(Me.TreeStruktur.Nodes) f.ProgressBar1.Value = 0 f.ProgressBar1.Maximum = ncol.Count For i = 1 To ncol.Count Dim dt As New DataTable f.ProgressBar1.Value = f.ProgressBar1.Value + 1 Application.DoEvents() dt = Datenklasse.Get_Data_for_ExcelExport(Datenklasse.Get_SelectionTypeText(Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, Me.TreeStruktur.SelectedNode)), ncol.Item(i)) If i = 1 Then ds.Tables.Add(dt.Copy) Else For Each r As DataRow In dt.Rows ds.Tables(0).ImportRow(r) Next End If Next f.Close() f.Dispose() Dim rpt As New _FRReporting.frmAuswertung("ExcelExport", ds, Globals.clsapplication.sTmp_filepath.Value) rpt.MdiParent = Me.MdiParent rpt.Show() End Sub Private Sub ExportVorbereitenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ExportVorbereitenToolStripMenuItem.Click If Globals.ExcelExport_Form_exists = False Then Dim f As New frmExportContainer f.MdiParent = Me.MdiParent f.Show() Globals.ExcelExport_Form_exists = True End If Dim f1 As New frmFortschritt f1.Show() ncol.Clear() Get_Checked_Nodes(Me.TreeStruktur.Nodes) f1.ProgressBar1.Value = 0 f1.ProgressBar1.Maximum = ncol.Count For i = 1 To ncol.Count Dim arr(3) As String Dim tn As New TreeNode f1.ProgressBar1.Value = f1.ProgressBar1.Value + 1 Application.DoEvents() tn = Uebersicht.FindNode(Me.TreeStruktur.Nodes, ncol.Item(i), "") evh.Fire_Export_Vorbereiten_Clicked(Datenklasse.Get_SelectionTypeText(Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, Me.TreeStruktur.SelectedNode)), tn.Text, tn.Tag) Next f1.Close() f1.Dispose() End Sub Private Sub FensterGrösseSpeichernToolStripMenuItem_Click_1(sender As Object, e As EventArgs) Handles FensterGrösseSpeichernToolStripMenuItem.Click WHandler.set_Windowsize(1, Me.Width, Me.Height) WHandler.set_Windowsize(11, Me.SplitContainer1.SplitterDistance, 0) End Sub Private Sub InEinemNeuenFensterÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles InEinemNeuenFensterÖffnenToolStripMenuItem.Click Dim f As New frmUebersicht(Me.TreeStruktur.SelectedNode.Tag) f.MdiParent = Me.MdiParent f.Show() End Sub 'Private Sub SyncVerwaltungDurchMitDateneigentuemerToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles Sync.Click ' If MsgBox("Wollen Sie die Beziehungen 'Verwaltung durch', 'Verwaltung mit','Dateneigentümer' in alle untergeordneten Elemente synchronisieren?", MsgBoxStyle.Question + MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then ' Me.AllgMainObjekte1.Sync_Beziehungen(Me.TreeStruktur.SelectedNode.Tag, Datenklasse.Get_SelectionTypeText(Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, Me.TreeStruktur.SelectedNode)), Me.TreeStruktur) ' End If 'End Sub Private Sub NeueBeziehungErstellenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NeueBeziehungErstellenToolStripMenuItem.Click Dim s As String s = Datenklasse.Get_SelectionTypeText(Uebersicht.TreeView_GetRootNode(Me.TreeStruktur, Me.TreeStruktur.SelectedNode)) Select Case s Case "Personal" fneuebeziehung = New _AllgMainObjekte.frmSetNeueBeziehung fneuebeziehung.SourceBezeichnung = Me.TreeStruktur.SelectedNode.Text fneuebeziehung.Sourceid = Me.TreeStruktur.SelectedNode.Tag fneuebeziehung.Type = 0 fneuebeziehung.MdiParent = Me.MdiParent fneuebeziehung.Mitarbeiternr = Globals.clsmitarbeiter.iMitarbeiternr.Value fneuebeziehung.Show() Case "Funktionstelle" fneuebeziehung = New _AllgMainObjekte.frmSetNeueBeziehung fneuebeziehung.SourceBezeichnung = Me.TreeStruktur.SelectedNode.Text fneuebeziehung.Sourceid = Me.TreeStruktur.SelectedNode.Tag fneuebeziehung.Type = 1 fneuebeziehung.MdiParent = Me.MdiParent fneuebeziehung.Mitarbeiternr = Globals.clsmitarbeiter.iMitarbeiternr.Value fneuebeziehung.Show() End Select End Sub Private Sub fneuebeziehung_C1Beziehungen_DoubleClicked(keyvalue As Integer, Typ As String, NewWindows As Boolean) Handles fneuebeziehung.C1Beziehungen_DoubleClicked If NewWindows = False Then Me.TreeStruktur.SelectedNode = Me.Uebersicht.FindNode(Me.TreeStruktur.Nodes, keyvalue, keyvalue) Else Dim f As New frmUebersicht(keyvalue) f.MdiParent = Me.MdiParent f.Show() End If End Sub Private Sub SortTreeNodeCollection(ByVal collection As TreeNodeCollection) ' Copy the Nodes to an array Dim nodes(collection.Count - 1) As TreeNode collection.CopyTo(nodes, 0) ' Sort the nodes based on Text Array.Sort(nodes, New TreeNodeComparer) ' Copy the nodes back into the collection collection.Clear() For Each node As TreeNode In nodes ' optionally, this would be the time to sort the child collections ' SortTreeNodeCollection(node.ChildNodes) collection.Add(node) Next End Sub Private Sub ToolStriptxtSuche_Click(sender As Object, e As EventArgs) Handles ToolStriptxtSuche.Click End Sub End Class Public Class TreeNodeComparer : Implements IComparer Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare ' Assumes objects are TreeNodes, otherwise will throw an InvalidCastException Return String.Compare(CType(x, TreeNode).Text, CType(y, TreeNode).Text) End Function End Class