Imports System Imports System.Data Imports System.Data.SqlTypes Imports System.Data.SqlClient Public Class frmLifeCycle Dim clslc As New TKB.VV.Lifecycle.clslifeCycle Dim Produkt As New TKB.VV.Lifecycle.clsProdukt Dim msg As New TKB.VV.Utils.MyMessage Dim FormReadonly As Boolean = False Dim FormDataChanged As Boolean = False Dim IsNewProdukt As Boolean = False Dim SpaltenTitel As New TKB.VV.Utils.Tabellenspalte Dim sec As New TKB.VV.Utils.MySecurity Dim WithEvents evh As Generic_Event_Handler = Globals.Generic_Event_Handler #Region "Closing / Check_Changes" ''' ''' Schliessen des Formulars ''' ''' ''' ''' Private Sub FormularClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing If Me.FormReadonly = True Then Exit Sub If Check_Changes() = False Then e.Cancel = True Else Produkt.Dispose() Me.Dispose() End If End Sub ''' ''' Prüfung, ob Datenänderungen vorgenommen wurden. ''' ''' Private Function Check_Changes() As Boolean If Me.FormReadonly Then Return True Exit Function End If Dim msgres As MsgBoxResult If Me.FormDataChanged Then msgres = msg.Show_MessageYesNoCancel(3) Select Case msgres Case MsgBoxResult.Yes Save_data() Return True Case MsgBoxResult.Cancel Return False Case MsgBoxResult.No Me.FormDataChanged = False Return True End Select Else Return True End If End Function #End Region #Region "Formular" Sub New() InitializeComponent() Me.CtlPhasen1.Connectionstring = Globals.sConnectionString End Sub Private Sub dtPicker_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles dtAbgeloestAm.Leave, _ dtEntscheidungsterminNachfolgeprodukt.Leave, dtNaechsteUeberpruefung.Leave Dim s As String Dim obj As DateTimePicker = sender s = obj.Name End Sub #End Region #Region "Buttons/Menu" ''' ''' Formular schliessen ''' ''' ''' ''' Private Sub TSBtnQuit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnQuit.Click Me.Close() End Sub ''' ''' Sicherungs-Button betätigt ''' ''' ''' ''' Private Sub TSBtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnSave.Click Me.Save_data() CtlPhasen1.Save_Phasen() Me.TreeStruktur.SelectedNode.Text = Produkt.sBezeichnung.Value ' Me.txtmutiert_am.Text = Me.Applikation.daMutiert_am.ToString Me.FormDataChanged = False TreeStruktur.Nodes.Sort() End Sub ''' ''' Neuer Datensatz erstellen ''' ''' ''' ''' Private Sub TSBtnNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnNew.Click If Me.TreeStruktur.SelectedNode.Tag < 1 Then msg.show_standardmessage(896, MsgBoxStyle.Critical) Exit Sub End If If Me.Check_Changes = False Then Exit Sub Me.Get_Data(Me.Produkt.Add_New) Me.IsNewProdukt = True End Sub ''' ''' Aktueller Datensatz inaktivieren ''' ''' ''' ''' Private Sub TSBtnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnDelete.Click If Me.TreeStruktur.SelectedNode.Tag < 1 Then msg.show_standardmessage(896, MsgBoxStyle.Critical) Exit Sub End If If msg.Show_MessageYesNo(295) = MsgBoxResult.Yes Then Me.Produkt.Delete_Produkt(Me.TreeStruktur.SelectedNode.Tag) 'TSBtnSuche_Click(sender, e) Me.TreeStruktur.SelectedNode = Me.TreeStruktur.Nodes(0) 'Me.Close() End If End Sub #End Region #Region "Eventhandler ChangeEreignisse" ''' ''' Allg Eventhandler für Chanage-Ereignise festlegen ''' ''' ''' Private Sub AddChanges(ByVal Container As Control) Dim l As New List(Of Control) Me.GetControl(Me, "*", l) Dim evh As EventHandler = AddressOf ChangesMade For Each c As Control In l If TypeOf c Is TextBox Then Dim ctl As TextBox = c AddHandler ctl.TextChanged, evh End If If TypeOf c Is MaskedTextBox Then Dim ctl As MaskedTextBox = c AddHandler ctl.TextChanged, evh End If If TypeOf c Is ComboBox Then Dim ctl As ComboBox = c AddHandler ctl.SelectedValueChanged, evh End If If TypeOf c Is RichTextBox Then Dim ctl As RichTextBox = c AddHandler ctl.TextChanged, evh End If If TypeOf c Is CheckBox Then If c.Name <> "cboxNurAktive" Then Dim ctl As CheckBox = c AddHandler ctl.CheckedChanged, evh End If End If If TypeOf c Is DateTimePicker Then Dim ctl As DateTimePicker = c AddHandler ctl.ValueChanged, evh End If If TypeOf c Is CheckedListBox Then Dim ctl As CheckedListBox = c AddHandler ctl.ItemCheck, AddressOf ChecketListBoxChange End If Next End Sub ''' ''' Envent-Handler für Change-Ereignisse ''' ''' ''' ''' Private Sub ChangesMade(ByVal sender As Object, ByVal e As System.EventArgs) Me.FormDataChanged = True Dim objtype As System.Type = sender.GetType If objtype.Name = "MaskedTextBox" Then Dim o As MaskedTextBox = sender If o.Text = "01.01.1900" Then o.Text = " . . " End If End Sub Private Sub ChecketListBoxChange(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs) Me.FormDataChanged = True End Sub ''' ''' Sucht in den Base-Controls sämtliche Controls mit dem Namen in "Key" (Wildcards * möglich) und listet ''' die gefundnen Controls in der Liste L zur weiteren Bearbeitung ''' ''' Base-Contrlo (z.B. aktuelles Formular ''' Schlüssel welcher gesucht werden soll ''' Liste der gefundenen Objekte ''' True wenn eines oder mehr Controls gefunden wurden, false wenn kein Control gefunden wurde. ''' ''' Private Function GetControl(ByVal BaseControl As Control, ByVal Key As String, ByRef L As List(Of Control), Optional ByVal ReturnAtFirstElement As Boolean = False) As Boolean If L Is Nothing Then L = New List(Of Control) Dim Gut As Boolean Dim ReturnFlag As Boolean = False If Key IsNot Nothing Then Key = Key.ToLower If BaseControl.HasChildren = True Then For Each ctl As Control In BaseControl.Controls Gut = False If Key Is Nothing Then Gut = True Else If ctl.Name.Length >= Key.Length Then Key = Key.ToLower If Key.StartsWith("*") Then If Key.Substring(1) = ctl.Name.ToLower.Substring(ctl.Name.Length - (Key.Length - 1), Key.Length - 1) Then Gut = True ElseIf Key.EndsWith("*") Then If Key.Substring(0, Key.Length - 1) = ctl.Name.ToLower.Substring(0, Key.Length - 1) Then Gut = True Else If Key = ctl.Name.ToLower Then Gut = True End If End If End If If Gut = True Then L.Add(ctl) If ReturnAtFirstElement = True Then ReturnFlag = True End If If ReturnFlag = False Then Call GetControl(ctl, Key, L) End If Next End If If L.Count - 1 > -1 Then Return True Else Return False End If End Function #End Region #Region "Daten" ''' ''' Daten ab DB laden uns ins Form befüllen ''' ''' ''' Private Sub Get_Data(ByVal Produktnr As Integer) Try Produkt.Get_Produkt(Produktnr) If Produkt.bIstStruktur = True Then Me.GrpStammdaten.Visible = False Me.GrpLifeCycle.Visible = False Me.GrpDokumente.Visible = False Me.GrpBilder.Visible = False Me.GrpAenderungsnachweis.Visible = False Me.GrpAblösung.Visible = False Exit Sub Else Me.GrpStammdaten.Visible = True Me.GrpLifeCycle.Visible = True Me.GrpDokumente.Visible = True Me.GrpBilder.Visible = True Me.GrpAenderungsnachweis.Visible = True Me.GrpAblösung.Visible = True End If Me.txtProduktname.Text = Produkt.sBezeichnung.Value Me.txtBemerkung.Text = Produkt.sBeschreibung.Value Me.txtVersion.Text = Produkt.sVersion.Value Try Me.txtAbgeloestdurch.Text = Produkt.sAbgeloest_durch.Value Catch ex As Exception Me.txtAbgeloestdurch.Text = "" End Try If Produkt.daAbgeloest_am.IsNull Then Me.txtAbgeloestam.Text = "01.01.1900" Else Me.txtAbgeloestam.Text = Produkt.daAbgeloest_am.ToString End If If Produkt.daEntscheidungstermin.IsNull Then Me.txtEntscheidungsterminNachfolgeprodukt.Text = "01.01.1900" Else Me.txtEntscheidungsterminNachfolgeprodukt.Text = Produkt.daEntscheidungstermin.ToString End If If Produkt.daNächste_Ueberprüfung.IsNull Then Me.txtNaechsteUeberpruefung.Text = "01.01.1900" Else Me.txtNaechsteUeberpruefung.Text = Produkt.daNächste_Ueberprüfung.ToString End If Me.cbboxProdukttyp.SelectedValue = Produkt.iProdukttypNr.Value If Produkt.iStatusNr = 0 Then Me.cbEingesetzt.Checked = False Else Me.cbEingesetzt.Checked = True Me.txterstellt_am.Text = Produkt.daErstellt_am.ToString Me.txtmutiert_am.Text = Produkt.daMutiert_am.ToString Me.txtmutierer.Text = Produkt.MutiererText Me.CtlPhasen1.Produktnr = Me.Produkt.iLC_ProduktNr.Value Try Me.LCDOkumente.ProduktNr = Me.Produkt.iLC_ProduktNr.Value Catch End Try sec.Set_Form_Security(Me) Me.FormDataChanged = False Catch ex As Exception MsgBox(ex.Message) Try For Each ctl As ToolStripButton In Me.ToolStrip1.Items ctl.Enabled = False Next Catch End Try Me.TSBtnQuit.Enabled = True End Try Me.FormDataChanged = False End Sub Private Sub Set_Checkedlistbox(ByRef clb As CheckedListBox, ByRef data As DataTable) Dim i As Integer For i = 0 To clb.Items.Count - 1 clb.SetItemCheckState(i, CheckState.Unchecked) Next Dim chk As Integer = 0 Dim ii As Integer Dim oc As CheckedListBox.ObjectCollection = clb.Items For i = 0 To data.Rows.Count - 1 For ii = 0 To oc.Count - 1 If oc.Item(ii).item(0) = data.Rows(i).Item(2) Then clb.SetItemCheckState(ii, CheckState.Checked) End If Next Next End Sub ''' ''' Daten ab Form speichern ''' ''' Private Sub Save_data() Produkt.sBeschreibung = New SqlTypes.SqlString(CType(Me.txtBemerkung.Text, String)) Produkt.sBezeichnung = New SqlTypes.SqlString(CType(Me.txtProduktname.Text, String)) Produkt.sVersion = New SqlTypes.SqlString(CType(Me.txtVersion.Text, String)) Produkt.sAbgeloest_durch = New SqlTypes.SqlString(CType(Me.txtAbgeloestdurch.Text, String)) If IsDate(Me.txtAbgeloestam.Text) Then Produkt.daAbgeloest_am = New SqlTypes.SqlDateTime(CType(Me.txtAbgeloestam.Text, DateTime)) Else Produkt.daAbgeloest_am = New SqlTypes.SqlDateTime(CType(SqlDateTime.Null, DateTime)) End If If IsDate(Me.txtEntscheidungsterminNachfolgeprodukt.Text) Then Produkt.daEntscheidungstermin = New SqlTypes.SqlDateTime(CType(Me.txtEntscheidungsterminNachfolgeprodukt.Text, DateTime)) Else Produkt.daEntscheidungstermin = New SqlTypes.SqlDateTime(CType(SqlDateTime.Null, DateTime)) End If If IsDate(Me.txtNaechsteUeberpruefung.Text) Then Produkt.daNächste_Ueberprüfung = New SqlTypes.SqlDateTime(CType(Me.txtNaechsteUeberpruefung.Text, DateTime)) Else Produkt.daNächste_Ueberprüfung = New SqlTypes.SqlDateTime(CType(SqlDateTime.Null, DateTime)) End If If Me.cbEingesetzt.Checked Then Produkt.iStatusNr = New SqlTypes.SqlInt32(CType(1, Int32)) Else Produkt.iStatusNr = New SqlTypes.SqlInt32(CType(0, Int32)) End If Produkt.iProdukttypNr = New SqlTypes.SqlInt32(CType(Me.cbboxProdukttyp.SelectedValue, Int32)) Produkt.Save_Data() Me.FormDataChanged = False End Sub Private Function Get_CheckedItems(ByRef clb As CheckedListBox) As String Dim i As Integer = 0 Dim s As String = "" For i = 1 To clb.CheckedItems.Count s = s + clb.CheckedItems(i).ToString Next Return s End Function #End Region Private Sub frmLifeCycle_Load(sender As Object, e As EventArgs) Handles MyBase.Load clslc.Load_Treestrukutr(Me.TreeStruktur) Me.cbboxProdukttyp.DataSource = clslc.Produkttypen Me.cbboxProdukttyp.DisplayMember = "Bezeichnung" Me.cbboxProdukttyp.ValueMember = "LC_Produkttypnr" AddChanges(Me) TreeStruktur.Nodes.Sort() Me.CtlPhasen1.Connectionstring = Globals.sConnectionString Me.CtlPhasen1.Mitarbeiternr = Globals.clsmitarbeiter.iMitarbeiternr.Value Me.LCDOkumente.ConnectionString = Globals.sConnectionString Me.LCDOkumente.Mitarbeiternr = Globals.clsmitarbeiter.iMitarbeiternr Me.LCDOkumente.Doktype = 1 Me.LCDOkumente.TempFilePath = Globals.clsapplication.sTmp_filepath.ToString Try Me.LCDOkumente.ProduktNr = Me.TreeStruktur.SelectedNode.Tag Catch End Try End Sub Private Sub TreeStruktur_AfterNodeDrop(sender As Object, e As DevComponents.AdvTree.TreeDragDropEventArgs) Handles TreeStruktur.AfterNodeDrop For Each n As DevComponents.AdvTree.Node In e.Nodes Produkt.Get_Produkt(n.Tag) Produkt.iLC_ProduktNr_Parent = New SqlInt32(CType(e.NewParentNode.Tag, Int32)) Produkt.Save_Data() e.NewParentNode.Nodes.Sort() Next Me.TreeStruktur.SelectedNode = clslc.FindNode(Me.TreeStruktur.Nodes, e.Node.Tag, e.Node.Tag) End Sub Private Sub TreeStruktur_Click(sender As Object, e As EventArgs) Handles TreeStruktur.Click Me.Cursor = Cursors.WaitCursor Try Me.GrpBilder.Enabled = False Get_Data(Me.TreeStruktur.SelectedNode.Tag) Me.LCDOkumente.ProduktNr = Me.TreeStruktur.SelectedNode.Tag Application.DoEvents() If Me.GrpBilder.Visible = True Then Me.GrpBilder.Enabled = True Me.CtlPictures1.Connectionstring = Globals.sConnectionString Me.CtlPictures1.Produktnr = Me.Produkt.iLC_ProduktNr.Value Me.CtlPictures1.Mitarbeiternr = Globals.clsmitarbeiter.iMitarbeiternr.Value Me.CtlPictures1.TempfilePath = Globals.clsapplication.sTmp_filepath Me.CtlPictures1.Refresh() End If Catch End Try Me.Cursor = Cursors.Default End Sub Private Sub DateTimePicker_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _ dtAbgeloestAm.ValueChanged, dtEntscheidungsterminNachfolgeprodukt.ValueChanged, dtNaechsteUeberpruefung.ValueChanged Dim s As String Dim obj As DateTimePicker = sender s = obj.Name s = "txt" + s.Substring(2, s.Length - 2) Dim l As New List(Of Control) Dim txtb As MaskedTextBox GetControl(Me, s, l) For Each ctl As Control In l txtb = CType(ctl, MaskedTextBox) txtb.Text = obj.Value Next End Sub Private Sub frmLifeCycle_Resize(sender As Object, e As EventArgs) Handles Me.Resize Me.GrpBilder.Height = Me.ClientSize.Height - Me.GrpDokumente.Height - Me.GrpLifeCycle.Height - 30 End Sub Private Sub NeuesElementToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles NeuesElementToolStripMenuItem.Click Produkt.Add_New(Me.TreeStruktur.SelectedNode.Tag) Produkt.bIstStruktur = New SqlBoolean(CType(False, Boolean)) Produkt.sBezeichnung = New SqlString(CType("Neues Element", String)) Produkt.iImageindex = New SqlInt32(CType(Me.TreeStruktur.SelectedNode.ImageIndex, Int32)) Produkt.Save_Data() Dim NewNode As New DevComponents.AdvTree.Node NewNode.Text = "Neues Element" NewNode.ImageIndex = Produkt.iImageindex.Value NewNode.Tag = Produkt.iLC_ProduktNr.Value Me.TreeStruktur.SelectedNode.Nodes.Add(NewNode) If NewNode.Parent.Expanded = False Then NewNode.Parent.Expand() TreeStruktur.SelectedNode = clslc.FindNode(TreeStruktur.Nodes, NewNode.Tag, NewNode.Tag) Get_Data(NewNode.Tag) End Sub #Region "EVH" Private Sub evh_Icon_Changed(keyvalue As Integer, Iconid As Integer) Handles evh.Icon_Changed Try Dim foundnode As DevComponents.AdvTree.Node foundnode = Me.clslc.FindNode(Me.TreeStruktur.Nodes, keyvalue, keyvalue) foundnode.ImageIndex = Iconid Catch End Try End Sub Private Function get_Icon(ByVal node As DevComponents.AdvTree.Node, Optional newNode As Boolean = False) As Integer If node.ImageIndex > 20 Then Return node.ImageIndex If node.Nodes.Count > 0 And node.ImageIndex < 10 Then Return node.ImageIndex + 10 End If Return node.ImageIndex End Function #End Region End Class