Imports System.Data.SqlClient Imports System.Data.SqlTypes Imports System.Drawing Imports System.Drawing.Color Imports System.IO Public Class frmSysadminMenu #Region "Deklarationen" Const CtrlMask As Byte = 8 Dim todelete(50) As Integer Dim itodelete As Integer Dim ssort As Integer Dim msg As New Utils.MyMessage #End Region #Region "Formular" ''' ''' Load des Formulars ''' ''' ''' ''' Private Sub FrmSysadminMenu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim menu As New db.clsMySysadminfunkion() menu.LoadTreeMenu(SysMenuTree) SysMenuTree.ExpandAll() itodelete = 0 Me.SysMenuTree.ContextMenu = Me.ContextMenu1 Me.Height = Me.Parent.ClientSize.Height End Sub ''' ''' Doppelklick auf einen Eintrag: Es wird geprüft, ob in der Tabelle SysadminFunktion im Attribut DomainTable ''' einen Wert vorhanden ist. Sofern dies der Fall ist, wird der generelle Domain-Table-Editor aufgerufen ''' ''' ''' ''' Private Sub SysMenuTree_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles SysMenuTree.DoubleClick Dim sysadmfnkt As New db.clsSysadminfunktion Dim wert As String wert = Me.SysMenuTree.SelectedNode.Tag If IsNumeric(wert) Then sysadmfnkt.iSysadminfnktnr = New SqlInt32(CType(wert, Int32)) sysadmfnkt.cpMainConnectionProvider = Globals.conn Globals.conn.OpenConnection() sysadmfnkt.SelectOne() Globals.conn.CloseConnection(True) If sysadmfnkt.sDomaintable.Value.IndexOf(";") > -1 Then 'Verbindungseditor Dim s As String = sysadmfnkt.sDomaintable.Value Dim sArray() As String = s.Split(";") Dim f As New FrmVerbindungEditor(sArray(0), sArray(1), sArray(2), sysadmfnkt.iSysadminfnktnr.Value) f.Width = sysadmfnkt.iFwidth.Value f.Height = sysadmfnkt.iFheight.Value f.Top = sysadmfnkt.iFtop.Value f.Left = sysadmfnkt.iFleft.Value f.MdiParent = Me.MdiParent f.Text = "Verbindungseditor: " + Me.SysMenuTree.SelectedNode.Text f.Show() Else '20090810 - Externe Tabellen mit dem Domaineditor mutieren If sysadmfnkt.sDomaintable.Value.IndexOf(":") > -1 Then Dim s As String = sysadmfnkt.sDomaintable.Value Dim sarray() As String = s.Split(":") Dim ofile As System.IO.File Dim oread As System.IO.StreamReader Dim scstring As String oread = ofile.OpenText(Application.StartupPath + "\" + sarray(0)) sCString = oread.ReadLine scstring = Crypto.DecryptText(scstring, "HutterundMueller") scstring = Microsoft.VisualBasic.Left(scstring, Len(scstring) - 1) oread.Close() Dim f As New frmDomainEditorExtTables(sarray(1), scstring) f.MdiParent = Me.MdiParent f.Text = "TicketXPert-Tabelle:" + sarray(1) f.Show() Else 'Einzelne Domaintable If sysadmfnkt.sDomaintable.Value = "ToolTip-Editor" Then Dim f As New FrmToolTipEditor f.MdiParent = Me.MdiParent f.Show() Exit Sub End If If sysadmfnkt.sDomaintable.Value <> "" Then Dim f As New frmDomainEditor(sysadmfnkt.sDomaintable.Value) f.MdiParent = Me.MdiParent f.Width = sysadmfnkt.iFwidth.Value f.Height = sysadmfnkt.iFheight.Value f.Top = sysadmfnkt.iFtop.Value f.Left = sysadmfnkt.iFleft.Value f.Text = "Tabellen-Editor: " + Me.SysMenuTree.SelectedNode.Text f.Show() End If End If End If sysadmfnkt.Dispose() End If End Sub ''' ''' Schliessen des Formulares ''' ''' ''' ''' Private Sub BeendenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeendenToolStripMenuItem.Click Me.Close() End Sub ''' ''' Fenster schliessen ''' ''' ''' ''' Private Sub TSBtnQuit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnQuit.Click Me.Close() End Sub #End Region #Region "SysMenuTree" ''' ''' Neuer Eintrag im Menu einfügen ''' ''' ''' ''' Private Sub MnuNeuerKnoten_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MnuNeuerKnoten.Click Dim a As String Dim tn As New TreeNode() Dim tnnew As New TreeNode() a = InputBox(msg.Get_Meldungstext(100)) If a = "" Then Exit Sub tn = Me.SysMenuTree.SelectedNode tnnew = tn.Nodes.Add(a) With tnnew .Tag() = 0 .ImageIndex() = 3 .SelectedImageIndex() = 3 End With tn.ImageIndex = 1 tn.SelectedImageIndex = 2 If tn.GetNodeCount(True) > 0 Then tn.ImageIndex = 1 tn.SelectedImageIndex = 2 End If Me.SysMenuTree.Refresh() End Sub ''' ''' Eintrag im Menu löschen ''' ''' ''' ''' Private Sub MnuKnotenLoeschen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MnuKnotenLoeschen.Click Dim tn As New TreeNode() Dim tnp As New TreeNode() Dim i As Integer tn = Me.SysMenuTree.SelectedNode tnp = tn.Parent If Not (Me.SysMenuTree.SelectedNode Is Nothing) Then itodelete = itodelete + 1 todelete(itodelete) = tn.Tag If msg.Show_MessageYesNo(101) = MsgBoxResult.Yes Then tn.Remove() End If If tnp.GetNodeCount(True) = 0 Then tnp.ImageIndex = 3 tnp.SelectedImageIndex = 3 End If Me.SysMenuTree.Refresh() End If End Sub ''' ''' Umbenennen des aktuellen Menu-Eintrages ''' ''' ''' ''' Private Sub MenuKnotenRename_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuKnotenRename.Click Dim a As String a = InputBox("Neuer Name:") If a = "" Then Exit Sub Me.SysMenuTree.SelectedNode.Text = a End Sub ''' ''' Menu Sichern ''' ''' ''' ''' Private Sub MnuSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MnuSave.Click Dim i As Integer conn.OpenConnection() ListNodeCollectionRecursive(Me.SysMenuTree.Nodes(0), 0) i = conn.CloseConnection(True) End Sub ''' ''' Knoten rekursiv auslesen ''' ''' ''' ''' Private Sub ListNodeCollectionRecursive(ByVal tnParent As TreeNode, ByRef iSort As Integer) Dim tn As TreeNode If tnParent.GetNodeCount(False) > 0 Then tn = tnParent.Nodes(0) Else tn = Nothing End If ssort = 0 Do Until tn Is Nothing iSort = iSort + 1 ListNodeSave(tn, iSort) If tn.GetNodeCount(False) > 0 Then Call ListNodeCollectionRecursive(tn, iSort) End If tn = tn.NextNode Loop End Sub ''' ''' einzelner Knoten sichern ''' ''' ''' ''' Private Sub ListNodeSave(ByVal tn As TreeNode, ByRef isort As Integer) Dim dbkey As New db.clsMyKey_Tabelle() Dim t As DataTable Dim key As Long Dim i As Integer Dim ftop, fleft, fheight, fwidth As Integer Dim sDomaintable As String = "" Dim sKeyfields As String = "" Dim sysadmfnkt As New db.clsSysadminfunktion dbkey.cpMainConnectionProvider = conn sysadmfnkt.cpMainConnectionProvider = conn If tn.Tag <> 0 Then sysadmfnkt.iSysadminfnktnr = New SqlInt32(CType(tn.Tag, Int32)) sysadmfnkt.SelectOne() ftop = sysadmfnkt.iFtop.Value fleft = sysadmfnkt.iFleft.Value fwidth = sysadmfnkt.iFwidth.Value fheight = sysadmfnkt.iFheight.Value sDomaintable = sysadmfnkt.sDomaintable.Value sKeyfields = sysadmfnkt.sKeyFields.Value End If sysadmfnkt.daMutiert_am = New SqlDateTime(CType(Now, DateTime)) sysadmfnkt.iMutierer = New SqlInt32(CType(Globals.clsmitarbeiter.iMitarbeiternr.Value, Int32)) sysadmfnkt.sBezeichnung = New SqlString(CType(tn.Text, String)) sysadmfnkt.sBeschreibung = New SqlString(CType("", String)) sysadmfnkt.iParentID = New SqlInt32(CType(tn.Parent.Tag, Int32)) sysadmfnkt.iImageIndex = New SqlInt32(CType(tn.ImageIndex, Int32)) sysadmfnkt.iImageIndexOpen = New SqlInt32(CType(tn.SelectedImageIndex, Int32)) sysadmfnkt.iSort = New SqlInt32(CType(isort, Int32)) sysadmfnkt.daErstellt_am = New SqlDateTime(CType(Now, DateTime)) sysadmfnkt.bAktiv = New SqlBoolean(CType(True, Boolean)) sysadmfnkt.iSprache = New SqlInt32(CType(1, Int32)) sysadmfnkt.iMandantnr = New SqlInt32(CType(Globals.clsmitarbeiter.iMandantnr.Value, Int32)) sysadmfnkt.iFtop = New SqlInt32(CType(ftop, Int32)) sysadmfnkt.iFleft = New SqlInt32(CType(fleft, Int32)) sysadmfnkt.iFwidth = New SqlInt32(CType(fwidth, Int32)) sysadmfnkt.iFheight = New SqlInt32(CType(fheight, Int32)) sysadmfnkt.sDomaintable = New SqlString(CType(sDomaintable, String)) sysadmfnkt.sKeyFields = New SqlString(CType(sKeyfields, String)) If tn.Tag <> 0 Then sysadmfnkt.iSysadminfnktnr = New SqlInt32(CType(tn.Tag, Int32)) sysadmfnkt.Update() Else key = dbkey.get_dbkey("sysadminfunktion") conn.OpenConnection() sysadmfnkt.iSysadminfnktnr = New SqlInt32(CType(key, Int32)) sysadmfnkt.Insert() tn.Tag = key End If For i = 1 To itodelete sysadmfnkt.iSysadminfnktnr = New SqlInt32(CType(todelete(i), Int32)) t = sysadmfnkt.SelectOne If t.Rows.Count > 0 Then sysadmfnkt.Delete() End If Next End Sub Private Sub SysMenutree_DragEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles SysMenuTree.DragEnter If (e.Data.GetDataPresent("System.Windows.Forms.TreeNode")) Then If (e.KeyState And CtrlMask) = CtrlMask Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.Move End If Else e.Effect = DragDropEffects.None End If End Sub Private Sub SysMenuTree_ItemDrag(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles SysMenuTree.ItemDrag If e.Button = MouseButtons.Left Then DoDragDrop(e.Item, DragDropEffects.Move Or DragDropEffects.Copy) End If End Sub Private Sub SysMenuTree_DragDrop(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles SysMenuTree.DragDrop Dim OriginationNode As TreeNode = CType(e.Data.GetData("System.Windows.Forms.TreeNode"), TreeNode) If e.Data.GetDataPresent("System.Windows.Forms.TreeNode", False) Then Dim pt As Point Dim DestinationNode As TreeNode pt = CType(sender, TreeView).PointToClient(New Point(e.X, e.Y)) DestinationNode = CType(sender, TreeView).GetNodeAt(pt) DestinationNode.Nodes.Add(CType(OriginationNode.Clone, TreeNode)) DestinationNode.Expand() If (e.KeyState And CtrlMask) <> CtrlMask Then OriginationNode.Remove() End If End If End Sub #End Region #Region "Spaltentitel generieren" ''' ''' Generiert die Spaltentitel in der Tabelle Spalten aufgrund der im Formular frmSysadminTableSelector gewählten Tabelle ''' ''' ''' ''' Private Sub SpaltentitelGenerierenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SpaltentitelGenerierenToolStripMenuItem.Click Dim f As New frmSysadminTableSelector() Dim tablename As String tablename = (f.get_tablename()) If tablename = "" Then Exit Sub Generate_Data(tablename) End Sub ''' ''' Ruft die SP zur Spalten-Generierung auf ''' ''' ''' Private Sub Generate_Data(ByVal tablename As String) Dim scmCmdToExecute As SqlCommand = New SqlCommand() Dim dttable As New DataTable(tablename) scmCmdToExecute.CommandText = "dbo.[sp_update_spalten]" scmCmdToExecute.CommandType = CommandType.StoredProcedure scmCmdToExecute.Connection = conn.scoDBConnection Try scmCmdToExecute.Parameters.Add(New SqlParameter("@Tablename", SqlDbType.VarChar, 255, ParameterDirection.Input, True, 0, 0, "", DataRowVersion.Proposed, tablename)) scmCmdToExecute.Connection.Open() scmCmdToExecute.ExecuteNonQuery() Return Catch ex As Exception Throw New Exception(msg.Get_Meldungstext(103), ex) Finally scmCmdToExecute.Connection.Close() End Try End Sub #End Region Private Sub FrmSysadminMenu_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize If Me.Width > 300 Then Me.Width = 300 End Sub Private Sub SysMenuTree_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles SysMenuTree.AfterSelect End Sub End Class