Imports System Imports System.Data Imports System.Data.SqlTypes Imports System.Data.SqlClient Public Class frmDokument #Region "Deklarationen" Dim Dokument As New DMS.clsDok Dim DokumentAblageTyp As New TKB.VV.DB.clsLC_Dokumenttyp Dim DokumentAblageTypen As New DataTable Dim FormReadonly As Boolean = False Dim FormDataChanged As Boolean = False Dim SpaltenTitel As New Utils.Tabellenspalte Dim Aktuelles_Dokument As Integer Dim Aktuelles_Element As Integer Dim Doktype As Integer ''' ''' Doktype ''' 1: Vertragselement ''' 2: Test-Drehbuch ''' 3: Applikationsdokument ''' 4: Applikationlogbuch ''' ö ''' Dim Aktueller_Doktype As Integer Dim Anzeige As Boolean = False Private SaveFileName As String = "" Dim Neuer_Datensatz As Boolean = False Dim ishyperlink As Boolean = False Dim hyperlink As String = "" #End Region #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 If Me.Dokument.Neuer_Datensatz = True Then Me.Dokument.Delete(Me.Dokument.iDokumentNr.Value) Me.Dispose() End If End Sub ''' ''' Prüfung, ob Datenänderungen vorgenommen wurden. Beim Speichern werden ebenfalls allfällige Änderungen von C1DokumentAblagoeOrt durchgeführt. ''' Wurden lediglich Änderungen bei C1Dokumentablageort vorgenommen, wird separat gefrat, ob die Änderungen gespeichert werden sollen. ''' ''' Private Function Check_Changes() As Boolean If Me.FormReadonly Then Exit Function Dim msgres As MsgBoxResult If Me.FormDataChanged Then msgres = MsgBox("Möchten Sie die Änderungen speichern?", vbYesNoCancel + MsgBoxStyle.Question) Select Case msgres Case MsgBoxResult.Yes Save_data() Return True Case MsgBoxResult.Cancel Return False Case MsgBoxResult.No Return True End Select Else Return True End If End Function #End Region #Region "Formular" ''' ''' ''' ''' Optionaler Parameter Dokumentnummer des aktuellen Dokuments ''' Sub New(ByVal DokumentNr As Integer, ByVal Doktype As Integer, Optional ByVal Elementnr As Integer = -1, Optional ByVal Anzeige As Boolean = False, Optional ByVal CreateNew As Boolean = False) Me.InitializeComponent() If CreateNew Then Me.Aktuelles_Dokument = Me.Dokument.Add_New(Elementnr, DokType) Me.Neuer_Datensatz = True Else Me.Aktuelles_Dokument = DokumentNr End If Me.Anzeige = Anzeige Me.Aktuelles_Element = Elementnr Me.Doktype = Doktype End Sub Sub New(ByVal Produktnr As Integer, ByVal Hyperlink As Boolean, ByVal Link As String) Me.InitializeComponent() Me.Aktuelles_Dokument = Me.Dokument.Add_New(Produktnr, 1) Me.Neuer_Datensatz = True Me.Anzeige = Anzeige Me.Aktuelles_Element = Produktnr Me.Doktype = 1 Me.ishyperlink = True Me.txtOriginalFilename_incl_path.Text = Link Me.txtHyperlink.Text = Link Me.hyperlink = Link End Sub Sub New(ByVal DokumentNr As Integer, ByVal Doktype As Integer, Optional ByVal Elementnr As Integer = -1, Optional ByVal Anzeige As Boolean = False, Optional ByVal CreateNew As Boolean = False, Optional ByVal Filename As String = "") Me.InitializeComponent() If CreateNew Then Me.Aktuelles_Dokument = Me.Dokument.Add_New(Elementnr, Doktype) Me.Neuer_Datensatz = True Me.Dokument.sBezeichnung = New SqlString(CType(System.IO.Path.GetFileName(Filename), String)) Me.Dokument.sFilename = New SqlString(CType(System.IO.Path.GetFileName(Filename), String)) Me.Dokument.sOriginalFilename_incl_Path = New SqlString(CType(Filename, String)) Me.Dokument.Save_Data() Me.txtDateiname.Text = System.IO.Path.GetFileName(Filename) Me.txtFilename.Text = Filename Else Me.Aktuelles_Dokument = DokumentNr End If Me.Anzeige = Anzeige Me.Aktuelles_Element = Elementnr Me.Doktype = Doktype End Sub ''' ''' Formular-Load ''' ''' ''' ''' Private Sub frmDokument_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Anzeige = True Then Me.TSBtnSuche.Enabled = False Me.TSBtnSave.Enabled = False Else Me.TSBtnSuche.Enabled = True End If If Me.TSBtnSave.Enabled = False Or Me.TSBtnSave.Visible = False Then Me.FormReadonly = True Me.TSBtnCopy.Enabled = False Me.TSBtnNew.Enabled = False Me.TSBtnDelete.Enabled = False Else Me.FormReadonly = False End If 'Dokumenttypen-Laden Me.Dokument.Get_Dokumenttypen() Me.cboxDokumenttyp.DataSource = Me.Dokument.Dokumenttypdaten Me.cboxDokumenttyp.DisplayMember = "Bezeichnung" Me.cboxDokumenttyp.ValueMember = "Dokumenttypnr" AddChanges(Me) Get_Data(Me.Aktuelles_Dokument) If Dokument.iDokType.Value = 6 Then Me.txtHyperlink.Text = Me.txtOriginalFilename_incl_path.Text End If If Me.Neuer_Datensatz = True Then Me.Dokument.Neuer_Datensatz = True Me.Neuer_Datensatz = False Me.cboxDokumenttyp.SelectedValue = Me.Dokument.Dokumenttypdaten.Rows(0).Item("dokumenttypnr") End If Me.txtBezeichnung.Focus() If ishyperlink = True Then Me.cboxDokumenttyp.Text = "Hyperlink" Me.txtHyperlink.Text = hyperlink Me.cboxDokumenttyp.SelectedValue = 6 Me.pnlDokument.Visible = False Me.pnlHyperlink.Visible = True Me.Height = Me.ToolStrip1.Height + Me.Panel1.Height + Me.pnlHyperlink.Height + Me.MenuStrip1.Height + 20 End If 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() Me.txtMutiert_am.Text = Me.Dokument.daMutiert_am.ToString Me.FormDataChanged = False End Sub ''' ''' Datensatz kopieren ''' ''' ''' ''' Private Sub TSBtnCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnCopy.Click If Me.Check_Changes = False Then Exit Sub Me.Get_Data(Dokument.Create_Copy(Me.Dokument.iDokumentNr.Value)) Me.Dokument.Neuer_Datensatz = True End Sub ''' ''' Neuer Datensatz erstellen ''' ''' ''' ''' Private Sub TSBtnNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnNew.Click If Me.Check_Changes = False Then Exit Sub Me.Get_Data(Me.Dokument.Add_New(Me.Aktuelles_Element, Me.Doktype)) Me.txtFilename.Text = "" Me.Dokument.Neuer_Datensatz = True Me.txtBezeichnung.Focus() End Sub ''' ''' Aktueller Datensatz inaktivieren ''' ''' ''' ''' Private Sub TSBtnDelete_Click(ByVal senderBeendenToolStripMenuItem As System.Object, ByVal e As System.EventArgs) Handles TSBtnDelete.Click If MsgBox("Das Dokument wirklich löschen?", vbYesNo + vbQuestion) = MsgBoxResult.Yes Then Me.Dokument.Delete_Dokument(Me.Dokument.iDokumentNr.Value) Me.Close() End If End Sub ''' ''' Menu Beenden ''' ''' ''' ''' Private Sub BeendenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BeendenToolStripMenuItem.Click Me.TSBtnQuit_Click(sender, e) End Sub ''' ''' Vertragspartner suchen ''' ''' ''' ''' Private Sub TSBtnSuche_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TSBtnSuche.Click If Not Me.FormReadonly Then Check_Changes() 'Dim i As Integer 'If Me.Vertragspartnerdata.Vertragspartner_Suchen(i) = True Then ' Me.Get_Data(i) '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 CheckBox Then Dim ctl As CheckBox = c AddHandler ctl.CheckedChanged, evh 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 ''' ''' 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 ''' ''' Handelt das Change-Ereignis eines Datetimepckers und stellt das ausgewählte Datum in das entsprechende Textfeld ''' ''' ''' ''' Private Sub DateTimePicker_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtPickerVersionsdatum.ValueChanged Dim s As String Dim obj As DateTimePicker = sender s = obj.Name s = "txt" + s.Substring(8, s.Length - 8) 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 #End Region #Region "Daten" ''' ''' Daten ab DB laden uns ins Form befüllen ''' ''' ''' Private Sub Get_Data(ByVal Dokumentnr As Integer) Try Dokument.Get_Dokumenttypen() Dokument.Get_Dokument(Dokumentnr) Me.txtBezeichnung.Text = Dokument.sBezeichnung.Value Me.cboxDokumenttyp.SelectedValue = Dokument.iDokumenttypNr.Value Me.txtBeschreibung.Text = Dokument.sBeschreibung.Value Me.txtVersion.Text = Dokument.sVersion.ToString Me.txtVersionsdatum.Text = Dokument.daVersionsdatum.ToString Me.txtDateiname.Text = Dokument.sFilename.Value If Me.txtDateiname.Text <> "" Then Me.btnDokumentAnzeigen.Enabled = True Else Me.btnDokumentAnzeigen.Enabled = False Me.txtDateiname.ReadOnly = True Me.SaveFileName = Me.txtDateiname.Text Me.txtOriginalFilename_incl_path.Text = Dokument.sOriginalFilename_incl_Path.Value Me.txtErstellt_am.Text = Dokument.daErstellt_am.ToString Me.txtMutiert_am.Text = Dokument.daMutiert_am.ToString Me.txtMutierer.Text = Dokument.iMutierer.Value Try Me.cbaktiv.Checked = Dokument.bAktiv.Value = True Catch ex As Exception Me.cbaktiv.Checked = True End Try If Not Anzeige Then For Each ctl As ToolStripButton In Me.ToolStrip1.Items ctl.Enabled = True Next End If Me.FormDataChanged = False Catch ex As Exception For Each ctl As ToolStripButton In Me.ToolStrip1.Items ctl.Enabled = False Next Me.TSBtnQuit.Enabled = True Me.TSBtnSuche.Enabled = True End Try Me.FormDataChanged = False End Sub ''' ''' Daten ab Form speichern ''' ''' Private Sub Save_data() 'Prüfung, ob das Ausgewählte File zur Speicherung vorhanden ist If Not Me.ishyperlink Then If Me.txtFilename.Text <> "" And Me.cboxDokumenttyp.Text <> "Hyperlink" Then If Not IO.File.Exists(Me.txtFilename.Text) Then MsgBox("Die gewählte Datei ist nicth vorhanden." + vbExclamation) Exit Sub End If End If End If If Me.txtFilename.Text <> "" And Me.txtDateiname.Text <> "" And Me.txtDateiname.Text <> Me.SaveFileName And Me.SaveFileName <> "" Then 'If msg.Show_MessageYesNo(272) = MsgBoxResult.No Then ' msg.show_standardmessage(273, MsgBoxStyle.Information) ' Exit Sub 'End If End If Dokument.iKeyValue = New SqlInt32(CType(Me.Aktuelles_Element, Int32)) Dokument.iDokumenttypNr = New SqlInt32(CType(Me.cboxDokumenttyp.SelectedValue, Int32)) Dokument.sBezeichnung = New SqlString(CType(Me.txtBezeichnung.Text, String)) Dokument.sBeschreibung = New SqlString(CType(Me.txtBeschreibung.Text, String)) Dokument.sVersion = New SqlString(CType(Me.txtVersion.Text, String)) If IsDate(Me.txtVersionsdatum.Text) Then Dokument.daVersionsdatum = New SqlDateTime(CType(Me.txtVersionsdatum.Text, DateTime)) Else Dokument.daVersionsdatum = New SqlDateTime(CType(SqlDateTime.Null, DateTime)) End If If Me.cboxDokumenttyp.SelectedValue = 6 Then Me.txtDateiname.Text = Me.txtHyperlink.Text Me.txtOriginalFilename_incl_path.Text = Me.txtHyperlink.Text End If Dokument.sFilename = New SqlString(CType(Me.txtDateiname.Text, String)) Dokument.sOriginalFilename_incl_Path = New SqlString(CType(Me.txtOriginalFilename_incl_path.Text, String)) Dokument.bAktiv = New SqlBoolean(CType(Me.cbaktiv.Checked = True, Boolean)) Dokument.Save_Data() If Me.cboxDokumenttyp.Text <> "Hyperlink" Then If Dokument.Save_File(Dokument.iDokumentNr.Value, Me.txtFilename.Text) = False Then MsgBox("Die Datei konnte nicht gespeichert werden." + vbExclamation) End If 'Me.Dokument.Dokumentablageort.Save_Data() Me.SaveFileName = Me.txtDateiname.Text End If End Sub #End Region ''' ''' Auswahl des zu speichernden Dokumentes ''' ''' ''' ''' Private Sub brnFileOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles brnFileOpen.Click Me.OpenFileDialog1.ShowDialog() If Me.OpenFileDialog1.FileName <> "" Then Me.txtFilename.Text = Me.OpenFileDialog1.FileName Me.txtOriginalFilename_incl_path.Text = Me.txtFilename.Text Me.txtDateiname.Text = System.IO.Path.GetFileName(Me.txtFilename.Text) End Sub ''' ''' Dokument anzeigen ''' ''' ''' ''' Private Sub btnDokumentAnzeigen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDokumentAnzeigen.Click If Trim(Me.Aktuelles_Dokument) = "" Then Exit Sub Try Me.Dokument.Show_Doc(Me.Aktuelles_Dokument) Catch ex As Exception MsgBox("Die Datei konnte nicht geöffnet werden.", MsgBoxStyle.Exclamation) End Try End Sub ''' ''' Text-Change von Txt-Dateiname ''' ''' ''' ''' Private Sub txtDateiname_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtDateiname.TextChanged If Me.txtDateiname.Text <> "" Then Me.btnDokumentAnzeigen.Enabled = True Else Me.btnDokumentAnzeigen.Enabled = False Me.txtDateiname.ReadOnly = True End Sub Private Sub cboxDokumenttyp_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboxDokumenttyp.SelectedIndexChanged Try If Me.cboxDokumenttyp.Text = "Hyperlink" Then Me.pnlDokument.Visible = False Me.pnlHyperlink.Visible = True Me.Height = Me.ToolStrip1.Height + Me.Panel1.Height + Me.pnlHyperlink.Height + Me.MenuStrip1.Height + 20 Else Me.pnlDokument.Visible = True Me.pnlHyperlink.Visible = False Me.Height = Me.ToolStrip1.Height + Me.Panel1.Height + Me.pnlDokument.Height + Me.MenuStrip1.Height + 20 End If Catch End Try End Sub Private Sub txtHyperlink_TextChanged(sender As Object, e As EventArgs) Handles txtHyperlink.TextChanged Me.txtFilename.Text = Me.txtHyperlink.Text Me.txtOriginalFilename_incl_path.Text = Me.txtHyperlink.Text Me.txtDateiname.Text = Me.txtHyperlink.Text End Sub End Class