diff --git a/GUIs.ZooFlow/ClassControlCreator.vb b/GUIs.ZooFlow/ClassControlCreator.vb
new file mode 100644
index 00000000..de95c676
--- /dev/null
+++ b/GUIs.ZooFlow/ClassControlCreator.vb
@@ -0,0 +1,739 @@
+Imports DevExpress.XtraGrid
+Imports DevExpress.XtraGrid.Views.Grid
+Imports DevExpress.XtraTab
+Imports DigitalData.Modules.Logging
+
+Public Class ClassControlCreator
+
+ Private Const DEFAULT_TEXT = "Bezeichnung definieren"
+
+ Private Const DEFAULT_FONT_SIZE As Integer = 10
+ Private Const DEFAULT_FONT_FAMILY As String = "Arial"
+ Private Const DEFAULT_FONT_STYLE As FontStyle = FontStyle.Regular
+ Private Const DEFAULT_COLOR As Integer = 0
+ Private Const DEFAULT_WIDTH As Integer = 170
+ Private Const DEFAULT_HEIGHT As Integer = 20
+ Private Const DEFAULT_WIDTH_GRIDVIEW As Integer = 150
+ Private Const DEFAULT_HEIGHT_GRIDVIEW As Integer = 150
+
+
+ Public Const PREFIX_TEXTBOX = "TXT"
+ Public Const PREFIX_LABEL = "LBL"
+ Public Const PREFIX_CHECKBOX = "CHK"
+ Public Const PREFIX_COMBOBOX = "CMB"
+ Public Const PREFIX_DATETIMEPICKER = "DTP"
+ Public Const PREFIX_DATAGRIDVIEW = "DGV"
+ Public Const PREFIX_LOOKUP = "LU"
+ Public Const PREFIX_GRIDCONTROL = "GRID"
+ Public Const PREFIX_LINE = "LINE"
+ Public Const PREFIX_BUTTON = "BTN"
+
+ Public Shared GridTables As New Dictionary(Of String, DataTable)
+
+ Private Logger As Logger
+ Private Property Form As frmSearchStart
+ Private Property TabPage As XtraTabPage
+
+ Public Class ControlMeta
+ Public Property IndexName As String
+ Public Property IndexType As String
+ Public Property MultipleValues As Boolean = False
+ End Class
+ '''
+ ''' Standard Eigenschaften für alle Controls
+ '''
+ Private Class ControlDBProps
+ Public Guid As Integer
+ Public Name As String
+ Public Location As Point
+ Public [Font] As Font
+ Public [Color] As Color
+ End Class
+
+ Public Class ControlMetadata
+ Public Guid As Integer
+ Public [ReadOnly] As Boolean = False
+ End Class
+
+ Private Shared Function TransformDataRow(row As DataRow, pXPosition As Integer, pYPosition As Integer) As ControlDBProps
+ Dim oxPos As Integer = pXPosition
+ Dim oYPos As Integer = pYPosition
+ ' Dim style As FontStyle = NotNull(row.Item("FONT_STYLE"), DEFAULT_FONT_STYLE)
+ ' Dim size As Single = NotNull(row.Item("FONT_SIZE"), DEFAULT_FONT_SIZE)
+ ' Dim familyString As String = NotNull(row.Item("FONT_FAMILY"), DEFAULT_FONT_FAMILY)
+ 'Dim family As FontFamily = New FontFamily(familyString)
+
+ Dim oGuid As Integer = row.Item("GUID")
+ Dim oName As String = row.Item("ATTRIBUTE_TITLE")
+ Dim oLocation As New Point(oxPos, oYPos)
+ 'Dim oFont As New Font(family, size, style, GraphicsUnit.Point)
+ 'Dim oColor As Color = IntToColor(NotNull(row.Item("FONT_COLOR"), DEFAULT_COLOR))
+ 'Dim oReadOnly As Boolean = row.Item("READ_ONLY")
+
+ Return New ControlDBProps() With {
+ .Guid = oGuid,
+ .Name = oName,
+ .Location = oLocation}
+ '.Font = oFont,
+ '.Color = oColor
+
+ End Function
+ Public Function CreateBaseControl(ctrl As Control, OAttributeRow As DataRow, pXPosition As Integer, pYPosition As Integer) As Control
+ Try
+ Dim props As ControlDBProps = TransformDataRow(OAttributeRow, pXPosition, pYPosition)
+
+ ctrl.Tag = New ControlMetadata() With {
+ .Guid = props.Guid
+ }
+ ctrl.Name = props.Name
+ ctrl.Location = props.Location
+ ctrl.Font = props.Font
+ ctrl.ForeColor = props.Color
+
+
+ Return ctrl
+ Catch ex As Exception
+ Logger.Error(ex)
+ End Try
+
+ End Function
+
+ Public Sub New(pTabPage As XtraTabPage, pForm As frmSearchStart)
+ Me.Form = pForm
+ Me.TabPage = pTabPage
+ Logger = My.LogConfig.GetLogger()
+ End Sub
+
+ Public Function CreateExistingDataGridView(row As DataRow, pXPosition As Integer, pYPosition As Integer) As DataGridView
+ Dim oDataGridView As DataGridView = CreateBaseControl(New DataGridView(), row, pXPosition, pYPosition)
+
+ oDataGridView.Size = New Size(DEFAULT_WIDTH, DEFAULT_HEIGHT_GRIDVIEW)
+ oDataGridView.AllowUserToAddRows = False
+ oDataGridView.AllowUserToDeleteRows = False
+ oDataGridView.AllowUserToResizeColumns = False
+ oDataGridView.AllowUserToResizeRows = False
+ oDataGridView.AlternatingRowsDefaultCellStyle.BackColor = Color.Aqua
+
+ Dim col As New DataGridViewTextBoxColumn
+ col.HeaderText = ""
+ col.Name = "column1"
+ col.Width = oDataGridView.Width - 30
+ oDataGridView.Columns.Add(col)
+
+ 'If Not designMode Then
+ ' control.Enabled = Not row.Item("READ_ONLY")
+ ' control.TabStop = Not row.Item("READ_ONLY")
+ 'End If
+
+ Return oDataGridView
+ End Function
+ Public Function CreateExistingGridControl(pAttributeRow As DataRow, pXPosition As Integer, pYPosition As Integer) As GridControl
+ Dim oControl As GridControl = CreateBaseControl(New GridControl(), pAttributeRow, pXPosition, pYPosition)
+ Dim oDatatable As New DataTable
+ Dim oView As DevExpress.XtraGrid.Views.Grid.GridView
+
+ oControl.ForceInitialize()
+
+ oView = oControl.MainView
+ oView.OptionsView.ShowGroupPanel = False
+ oControl.ContextMenu = Nothing
+ oView.Appearance.EvenRow.BackColor = Color.LightBlue
+
+ oView.OptionsBehavior.Editable = False
+ oView.OptionsBehavior.ReadOnly = True
+
+ oView.OptionsBehavior.AllowAddRows = False
+ oView.OptionsBehavior.AllowDeleteRows = False
+ oView.OptionsView.NewItemRowPosition = NewItemRowPosition.None
+ oView.OptionsView.ShowAutoFilterRow = True
+ oView.OptionsView.EnableAppearanceEvenRow = True
+
+ oControl.Size = New Size(DEFAULT_WIDTH_GRIDVIEW, DEFAULT_HEIGHT_GRIDVIEW)
+
+ ' Add and configure navigator to delete rows
+ oControl.UseEmbeddedNavigator = True
+ With oControl.EmbeddedNavigator.Buttons
+ .CancelEdit.Visible = False
+ .Edit.Visible = False
+ .EndEdit.Visible = False
+ .First.Visible = False
+ .Last.Visible = False
+ .Next.Visible = False
+ .NextPage.Visible = False
+ .PrevPage.Visible = False
+ .Prev.Visible = False
+
+ End With
+
+ GridTables.Clear()
+ Dim oSQL As String = pAttributeRow.Item("SOURCE_SQL").ToString
+ oSQL = oSQL.Replace("@USER_LANGUAGE", My.Application.User.Language)
+ oSQL = oSQL.Replace("@pUSER_ID", My.Application.User.UserId)
+ Dim oDTSource As DataTable = My.Database_IDB.GetDatatable(oSQL)
+
+
+ Dim oColumn = New DataColumn() With {
+ .DataType = GetType(String),
+ .ColumnName = pAttributeRow.Item("ATTRIBUTE_TITLE").ToString,
+ .Caption = pAttributeRow.Item("ATTRIBUTE_TITLE").ToString,
+ .ReadOnly = False
+ }
+
+ oDatatable.Columns.Add(oColumn)
+
+ 'For Each oRow As DataRow In DT_MY_COLUMNS.Rows
+ ' ' Create Columns in Datatable
+
+ ' Dim oColumn = New DataColumn() With {
+ ' .DataType = GetType(String),
+ ' .ColumnName = pAttributeRow.Item("ATTRIBUTE_TITLE").ToString,
+ ' .Caption = pAttributeRow.Item("ATTRIBUTE_TITLE").ToString,
+ ' .ReadOnly = False
+ ' }
+
+ ' oDatatable.Columns.Add(oColumn)
+
+ ' ' Fetch and cache Combobox results
+ ' Dim oConnectionId As Integer = NotNull(oRow.Item("CONNECTION_ID"), 0)
+ ' Dim oSqlCommand As String = NotNull(oRow.Item("SQL_COMMAND"), "")
+
+ ' If Not clsPatterns.HasComplexPatterns(oSqlCommand) Then
+ ' If oConnectionId > 0 And oSqlCommand <> "" Then
+ ' Try
+ ' Dim oComboboxDataTable As DataTable = ClassDatabase.Return_Datatable_ConId(oSqlCommand, oConnectionId)
+ ' GridTables.Add(oRow.Item("SPALTENNAME"), oComboboxDataTable)
+ ' Catch ex As Exception
+ ' Logger.Warn("Could not load data for column {0} in control {1}", oRow.Item("SPALTENNAME"), oControl.Name)
+ ' Logger.Error(ex)
+ ' End Try
+ ' End If
+ ' End If
+
+
+ 'Next
+
+
+ oView.PopulateColumns()
+ oControl.DataSource = oDTSource
+
+
+ oControl.RefreshDataSource()
+ oControl.ForceInitialize()
+ Try
+ oView.Columns(0).Caption = "Existierende Werte"
+ Catch ex As Exception
+
+ End Try
+
+
+ 'AddHandler oView.CellValueChanged, AddressOf HandleCellValueChanged
+ 'AddHandler oView.CustomRowCellEdit, Sub(sender As Object, e As CustomRowCellEditEventArgs)
+ ' For Each oRow As DataRow In DT_MY_COLUMNS.Rows
+ ' If oRow.Item("SPALTENNAME") = e.Column.FieldName Then
+
+ ' If GridTables.ContainsKey(e.Column.FieldName) Then
+ ' Dim oComboboxDataTable As DataTable = GridTables.Item(e.Column.FieldName)
+ ' Dim oEditor As New RepositoryItemComboBox()
+ ' Dim oItems As New List(Of String)
+
+ ' AddHandler oEditor.Validating, Sub(_sender As ComboBoxEdit, _e As CancelEventArgs)
+ ' If oItems.Contains(_sender.EditValue) Then
+ ' _e.Cancel = False
+ ' Else
+ ' _e.Cancel = True
+ ' End If
+
+ ' End Sub
+ ' For Each oRow2 As DataRow In oComboboxDataTable.Rows
+ ' Dim oValue = oRow2.Item(0)
+
+ ' Try
+ ' oValue &= $" | {oRow2.Item(1)}"
+ ' Catch ex As Exception
+ ' End Try
+
+ ' oEditor.Items.Add(oValue)
+ ' oItems.Add(oValue)
+ ' Next
+
+ ' e.RepositoryItem = oEditor
+
+ ' End If
+ ' End If
+ ' Next
+ ' End Sub
+
+ 'AddHandler oView.CellValueChanged, Sub(sender As Object, e As CellValueChangedEventArgs)
+ ' Dim oValue = e.Value.ToString()
+ ' Dim oView2 As GridView = TryCast(sender, GridView)
+
+
+ ' If oValue.Contains(" | ") Then
+ ' oValue = oValue.Split(" | ").ToList().Item(0)
+ ' oView2.SetRowCellValue(e.RowHandle, e.Column, oValue)
+ ' End If
+ ' End Sub
+
+ Return oControl
+ End Function
+ Public Function AddCheckBox(indexname As String, y As Integer, vorbelegung As String, caption As String)
+ Try
+ Dim value As Boolean = False
+ Dim chk As New CheckBox
+ chk.Name = "chk" & indexname
+ chk.Size = New Size(100, 27)
+ chk.Location = New Point(11, y)
+ chk.Tag = New ControlMeta() With {
+ .IndexName = indexname,
+ .IndexType = "BOOLEAN"
+ }
+
+ If caption <> "" Then
+ chk.Text = caption
+ chk.Size = New Size(CInt(caption.Length * 15), 27)
+ End If
+
+ If Boolean.TryParse(vorbelegung, value) = False Then
+ If vorbelegung = "1" Or vorbelegung = "0" Then
+ chk.Checked = CBool(vorbelegung)
+ Else
+ chk.Checked = False
+ End If
+ Else
+ chk.Checked = value
+ End If
+
+ AddHandler chk.CheckedChanged, AddressOf Checkbox_CheckedChanged
+
+ Return chk
+ Catch ex As Exception
+ Logger.Info("Unhandled Exception in AddCheckBox: " & ex.Message)
+ Logger.Error(ex.Message)
+ Return Nothing
+ End Try
+ End Function
+
+ Public Sub Checkbox_CheckedChanged(sender As CheckBox, e As EventArgs)
+ 'PrepareDependingControl(sender)
+ End Sub
+
+ 'Public Function AddVorschlag_ComboBox(indexname As String, y As Integer, conid As Integer, sql_Vorschlag As String, Multiselect As Boolean, DataType As String, Optional Vorgabe As String = "", Optional AddNewValues As Boolean = False, Optional PreventDuplicateValues As Boolean = False, Optional SQLSuggestion As Boolean = False) As Control
+ ' Try
+ ' Dim oSql As String = sql_Vorschlag
+ ' Dim oConnectionString As String
+ ' Dim oControl As New DigitalData.Controls.LookupGrid.LookupControl2 With {
+ ' .Multiselect = Multiselect,
+ ' .AllowAddNewValues = AddNewValues,
+ ' .PreventDuplicates = PreventDuplicateValues,
+ ' .Location = New Point(11, y),
+ ' .Size = New Size(300, 27),
+ ' .Name = "cmbMulti" & indexname,
+ ' .Tag = New ControlMeta() With {
+ ' .IndexName = indexname,
+ ' .IndexType = DataType
+ ' }
+ ' }
+ ' oControl.Properties.AppearanceFocused.BackColor = Color.Lime
+
+ ' If Not String.IsNullOrEmpty(Vorgabe) Then
+ ' Dim oDefaultValues As New List(Of String)
+
+ ' If Vorgabe.Contains(",") Then
+ ' oDefaultValues = Vorgabe.
+ ' Split(",").ToList().
+ ' Select(Function(item) item.Trim()).
+ ' ToList()
+ ' Else
+ ' oDefaultValues = Vorgabe.
+ ' Split(ClassConstants.VECTORSEPARATOR).ToList().
+ ' Select(Function(item) item.Trim()).
+ ' ToList()
+ ' End If
+ ' oControl.SelectedValues = oDefaultValues
+ ' End If
+
+ ' AddHandler oControl.SelectedValuesChanged, AddressOf Lookup_SelectedValuesChanged
+
+ ' oConnectionString = ClassFormFunctions.GetConnectionString(conid)
+
+ ' If oConnectionString IsNot Nothing And oSql.Length > 0 And SQLSuggestion = True Then
+ ' Logger.Debug("Connection String (redacted): [{0}]", oConnectionString.Substring(0, 30))
+
+ ' If ClassPatterns.HasComplexPatterns(oSql) Then
+ ' Logger.Debug(" >>sql enthält Platzhalter und wird erst während der Laufzeit gefüllt!", False)
+ ' Else
+ ' Dim oDatatable = ClassDatabase.Return_Datatable_Combined(oSql, oConnectionString, False)
+ ' oControl.DataSource = oDatatable
+ ' End If
+ ' Else
+ ' Logger.Warn("Connection String for control [{0}] is empty!", oControl.Name)
+ ' End If
+
+ ' Return oControl
+ ' Catch ex As Exception
+ ' Logger.Info(" - Unvorhergesehener Unexpected error in AddVorschlag_ComboBox - Indexname: " & indexname & " - Fehler: " & vbNewLine & ex.Message)
+ ' Logger.Error(ex.Message)
+ ' MsgBox(ex.Message, MsgBoxStyle.Critical, "Unvorhergesehener Unexpected error in AddVorschlag_ComboBox:")
+ ' Return Nothing
+ ' End Try
+ 'End Function
+
+ 'Private Sub Lookup_SelectedValuesChanged(sender As LookupControl2, SelectedValues As List(Of String))
+ ' PrepareDependingControl(sender)
+ 'End Sub
+
+ Function AddCombobox(indexname As String, y As Integer)
+ Dim cmb As New ComboBox
+ cmb.Name = "cmb" & indexname
+ cmb.AutoSize = True
+ cmb.Size = New Size(300, 27)
+ cmb.Location = New Point(11, y)
+
+ cmb.Tag = New ControlMeta() With {
+ .IndexName = indexname
+ }
+
+
+ AddHandler cmb.SelectedIndexChanged, AddressOf OncmbSIndexChanged
+ AddHandler cmb.GotFocus, AddressOf OncmbGotFocus
+ AddHandler cmb.LostFocus, AddressOf OncmbLostFocus
+ AddHandler cmb.KeyDown, AddressOf OncmbKeyDown
+ Return cmb
+ End Function
+
+ Public Sub OncmbKeyDown(sender As System.Object, e As System.EventArgs)
+ Dim cmb As ComboBox = sender
+
+ ' Verhindert, dass Auswahlliste und Autocompleteliste übereinander liegen
+ If cmb.DroppedDown = True Then
+ cmb.DroppedDown = False
+ End If
+ End Sub
+
+ Public Sub OncmbGotFocus(sender As System.Object, e As System.EventArgs)
+ Dim cmb As ComboBox = sender
+ cmb.BackColor = Color.Lime
+ End Sub
+
+ Public Sub OncmbLostFocus(sender As System.Object, e As System.EventArgs)
+ Dim cmb As ComboBox = sender
+ cmb.BackColor = Color.White
+ End Sub
+
+ Public Sub OncmbSIndexChanged(sender As System.Object, e As System.EventArgs)
+ If Form.FormLoaded = False Then
+ Exit Sub
+ End If
+
+ Dim cmb As ComboBox = sender
+ If cmb.SelectedIndex <> -1 Then
+ If cmb.Text.Length > 15 Then
+ Dim g As Graphics = cmb.CreateGraphics
+ cmb.Width = g.MeasureString(cmb.Text, cmb.Font).Width + 30
+ g.Dispose()
+ End If
+ ' Get_NextComboBoxResults(cmb)
+
+
+ SendKeys.Send("{TAB}")
+ End If
+ End Sub
+
+ 'Private Sub Get_NextComboBoxResults(cmb As ComboBox)
+ ' Try
+ ' Dim indexname = cmb.Name.Replace("cmb", "")
+ ' Dim sql = "SELECT GUID,NAME,SQL_RESULT FROM TBDD_INDEX_MAN where SUGGESTION = 1 AND SQL_RESULT like '%@" & indexname & "%' and DOK_ID = " & CURRENT_DOKART_ID & " ORDER BY SEQUENCE"
+ ' Dim DT As DataTable = ClassDatabase.Return_Datatable(sql, True)
+ ' If Not IsNothing(DT) Then
+ ' If DT.Rows.Count > 0 Then
+ ' Dim cmbname = "cmb" & DT.Rows(0).Item("NAME")
+ ' Renew_ComboboxResults(DT.Rows(0).Item("GUID"), indexname, cmb.Text)
+ ' End If
+
+ ' End If
+ ' Catch ex As Exception
+ ' MsgBox("Error in Get_NextComboBoxResults:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
+ ' End Try
+ 'End Sub
+
+ 'Private Sub Renew_ComboboxResults(INDEX_GUID As Integer, SearchString As String, Resultvalue As String)
+ ' Try
+ ' Dim connectionString As String
+ ' Dim sqlCnn As SqlConnection
+ ' Dim sqlCmd As SqlCommand
+ ' Dim adapter As New SqlDataAdapter
+
+ ' Dim oracleConn As OracleConnection
+ ' Dim oracleCmd As OracleCommand
+ ' Dim oracleadapter As New OracleDataAdapter
+
+ ' Dim NewDataset As New DataSet
+ ' Dim i As Integer
+
+ ' Dim DT_INDEX As DataTable = ClassDatabase.Return_Datatable("select * FROM TBDD_INDEX_MAN WHERE GUID = " & INDEX_GUID, True)
+ ' If IsNothing(DT_INDEX) Then
+ ' Exit Sub
+ ' End If
+
+ ' Dim conid = DT_INDEX.Rows(0).Item("CONNECTION_ID")
+ ' Dim sql_result = DT_INDEX.Rows(0).Item("SQL_RESULT")
+ ' Dim NAME = DT_INDEX.Rows(0).Item("NAME")
+ ' If Not IsNothing(conid) And Not IsNothing(sql_result) And Not IsNothing(NAME) Then
+ ' For Each ctrl As Control In Me.Panel.Controls
+ ' If ctrl.Name = "cmb" & NAME.ToString Then
+ ' Dim cmb As ComboBox = ctrl
+ ' Dim sql As String = sql_result.ToString.ToUpper.Replace("@" & SearchString.ToUpper, Resultvalue)
+
+ ' connectionString = ClassFormFunctions.GetConnectionString(conid)
+ ' If connectionString Is Nothing = False Then
+ ' 'SQL Befehl füllt die Auswahlliste
+
+ ' If connectionString.Contains("Initial Catalog=") Then
+ ' sqlCnn = New SqlConnection(connectionString)
+ ' sqlCnn.Open()
+ ' sqlCmd = New SqlCommand(sql, sqlCnn)
+ ' adapter.SelectCommand = sqlCmd
+ ' adapter.Fill(NewDataset)
+ ' ElseIf connectionString.StartsWith("Data Source=") And connectionString.Contains("SERVICE_NAME") Then
+ ' oracleConn = New OracleConnection(connectionString)
+ ' ' Try
+ ' oracleConn.Open()
+ ' oracleCmd = New OracleCommand(sql, oracleConn)
+ ' oracleadapter.SelectCommand = oracleCmd
+ ' oracleadapter.Fill(NewDataset)
+ ' End If
+ ' If NewDataset.Tables(0).Rows.Count > 0 Then
+ ' cmb.Items.Clear()
+ ' 'Die Standargrösse definieren
+ ' Dim newWidth As Integer = 300
+ ' For i = 0 To NewDataset.Tables(0).Rows.Count - 1
+ ' 'MsgBox(NewDataset.Tables(0).Rows(i).Item(0))
+ ' cmb.Items.Add(NewDataset.Tables(0).Rows(i).Item(0))
+ ' Try
+ ' Dim text As String = NewDataset.Tables(0).Rows(i).Item(0)
+ ' If text.Length > 15 Then
+ ' Dim g As Graphics = cmb.CreateGraphics
+ ' If g.MeasureString(text, cmb.Font).Width + 30 > newWidth Then
+ ' newWidth = g.MeasureString(text, cmb.Font).Width + 30
+ ' End If
+ ' g.Dispose()
+ ' End If
+ ' Catch ex As Exception
+ ' MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error in Anpassung Breite ComboBox:")
+ ' End Try
+
+ ' Next
+ ' cmb.Size = New Size(newWidth, 27)
+ ' cmb.AutoCompleteSource = AutoCompleteSource.ListItems
+ ' cmb.AutoCompleteMode = AutoCompleteMode.Suggest
+ ' End If
+ ' If connectionString.Contains("Initial Catalog=") Then
+ ' Try
+ ' adapter.Dispose()
+ ' sqlCmd.Dispose()
+ ' sqlCnn.Close()
+ ' Catch ex As Exception
+
+ ' End Try
+ ' Else
+ ' Try
+ ' oracleadapter.Dispose()
+ ' oracleCmd.Dispose()
+ ' oracleConn.Close()
+ ' Catch ex As Exception
+
+ ' End Try
+ ' End If
+ ' End If
+ ' End If
+ ' Next
+ ' End If
+ ' Catch ex As Exception
+ ' Logger.Info(" - Unvorhergesehener Unexpected error in Renew_ComboboxResults - Fehler: " & vbNewLine & ex.Message)
+ ' Logger.Error(ex.Message)
+ ' MsgBox(ex.Message, MsgBoxStyle.Critical, "Unvorhergesehener Unexpected error in Renew_ComboboxResults:")
+ ' End Try
+ 'End Sub
+
+ Public Function AddTextBox(pAttrName As String, y As Integer, text As String, pAttrDataType As String) As DevExpress.XtraEditors.TextEdit
+ Dim oEdit As New DevExpress.XtraEditors.TextEdit With {
+ .Name = "txt" & pAttrName,
+ .Size = New Size(260, 27),
+ .Location = New Point(11, y),
+ .Tag = New ControlMeta() With {
+ .IndexName = pAttrName,
+ .IndexType = pAttrDataType
+ }
+ }
+
+ Select Case pAttrDataType
+ Case "INTEGER"
+ oEdit.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.Numeric
+ oEdit.Properties.Mask.EditMask = "d"
+ Console.WriteLine()
+ End Select
+
+ If text IsNot Nothing Then
+ oEdit.Text = text
+ oEdit.SelectAll()
+ End If
+
+ AddHandler oEdit.GotFocus, AddressOf OnTextBoxFocus
+ AddHandler oEdit.LostFocus, AddressOf OnTextBoxLostFocus
+ AddHandler oEdit.KeyUp, AddressOf OnTextBoxKeyUp
+ AddHandler oEdit.TextChanged, AddressOf OnTextBoxTextChanged
+
+ Return oEdit
+ End Function
+
+ Public Sub OnTextBoxFocus(sender As System.Object, e As System.EventArgs)
+ Dim oTextbox As DevExpress.XtraEditors.TextEdit = sender
+ oTextbox.BackColor = Color.Lime
+ oTextbox.SelectAll()
+ End Sub
+
+ Public Sub OnTextBoxTextChanged(sender As System.Object, e As System.EventArgs)
+ Dim oTextbox As DevExpress.XtraEditors.TextEdit = sender
+ Using oGraphics As Graphics = oTextbox.CreateGraphics()
+ oTextbox.Width = oGraphics.MeasureString(oTextbox.Text, oTextbox.Font).Width + 15
+ End Using
+ End Sub
+
+ Public Sub OnTextBoxLostFocus(sender As System.Object, e As System.EventArgs)
+ Dim oTextbox As DevExpress.XtraEditors.TextEdit = sender
+ oTextbox.BackColor = Color.White
+ End Sub
+
+ Public Sub OnTextBoxKeyUp(sender As System.Object, e As System.Windows.Forms.KeyEventArgs)
+ Dim oTextbox As DevExpress.XtraEditors.TextEdit = sender
+
+ If oTextbox.Text = String.Empty Then
+ Exit Sub
+ End If
+
+ If e.KeyCode = Keys.Return Or e.KeyCode = Keys.Enter Or e.KeyCode = Keys.Tab Then
+ 'PrepareDependingControl(oTextbox)
+ End If
+
+ If (e.KeyCode = Keys.Return) Then
+ SendKeys.Send("{TAB}")
+ End If
+ End Sub
+
+
+ Public Function AddDateTimePicker(indexname As String, y As Integer, DataType As String) As DevExpress.XtraEditors.DateEdit
+ Dim oPicker As New DevExpress.XtraEditors.DateEdit With {
+ .Name = "dtp" & indexname,
+ .Size = New Size(260, 27),
+ .Location = New Point(11, y),
+ .Tag = New ControlMeta() With {
+ .IndexName = indexname,
+ .IndexType = DataType
+ }
+ }
+ oPicker.Properties.AppearanceFocused.BackColor = Color.Lime
+
+ Return oPicker
+ End Function
+ Sub OndtpChanged()
+ 'offen was hier zu tun ist
+ End Sub
+
+ 'Private Sub PrepareDependingControl(Control As Control)
+ ' If TypeOf Control Is Label Then
+ ' Exit Sub
+ ' End If
+
+ ' Try
+ ' Dim oMeta = DirectCast(Control.Tag, ClassControls.ControlMeta)
+ ' Dim oIndexName As String = oMeta.IndexName
+ ' Dim oSQL = $"SELECT * FROM TBDD_INDEX_MAN WHERE SQL_RESULT LIKE '%{oIndexName}%'"
+ ' Dim oDatatable As DataTable = ClassDatabase.Return_Datatable(oSQL)
+
+ ' If Not IsNothing(oDatatable) Then
+ ' Logger.Debug("Found [{0}] depending controls for [{1}]", oDatatable.Rows.Count, Control.Name)
+
+ ' For Each oRow As DataRow In oDatatable.Rows
+ ' Dim oControlName As String = NotNull(oRow.Item("NAME"), "")
+ ' Dim oConnectionId As Integer = NotNull(oRow.Item("CONNECTION_ID"), -1)
+ ' Dim oControlSql As String = NotNull(oRow.Item("SQL_RESULT"), "")
+
+ ' If oConnectionId = -1 Or oControlSql = String.Empty Then
+ ' Logger.Warn("Missing SQL Query or ConnectionId for Control [{0}]! Continuing.", oControlName)
+ ' Continue For
+ ' End If
+
+ ' oControlSql = ClassPatterns.ReplaceUserValues(oControlSql, USER_PRENAME, USER_SURNAME, USER_SHORTNAME, USER_LANGUAGE, USER_EMAIL, USER_ID, CURRENT_DOKART_ID)
+ ' oControlSql = ClassPatterns.ReplaceInternalValues(oControlSql)
+ ' oControlSql = ClassPatterns.ReplaceControlValues(oControlSql, Panel)
+
+
+ ' Logger.Debug("SQL After Preparing: [{0}]", oControlSql)
+ ' Logger.Debug("Setting new value for [{0}]", oControlName)
+ ' SetDependingControlResult(oControlName, oControlSql, oConnectionId)
+ ' Next
+ ' End If
+ ' Catch ex As Exception
+ ' Logger.Error(ex)
+ ' End Try
+ 'End Sub
+
+ 'Private Sub SetDependingControlResult(IndexName As String, SqlCommand As String, SqlConnectionId As Integer)
+ ' Try
+ ' If SqlCommand Is Nothing OrElse SqlCommand = String.Empty Then
+ ' Logger.Warn("New Value for Index [{0}] could not be set. Supplied SQL is empty.")
+ ' Exit Sub
+ ' End If
+
+ ' Dim oConnectionString = ClassFormFunctions.GetConnectionString(SqlConnectionId)
+ ' Dim oDatatable As DataTable = ClassDatabase.Return_Datatable_CS(SqlCommand, oConnectionString)
+ ' Dim oFoundControl As Control = Nothing
+
+ ' For Each oControl As Control In Panel.Controls
+ ' If TypeOf oControl Is Label Then
+ ' Continue For
+ ' End If
+
+ ' Dim oMeta = DirectCast(oControl.Tag, ClassControls.ControlMeta)
+ ' Dim oIndex As String = oMeta.IndexName
+
+ ' If oIndex = IndexName Then
+ ' oFoundControl = oControl
+ ' Exit For
+ ' End If
+ ' Next
+
+ ' If oFoundControl Is Nothing Then
+ ' Logger.Warn("Depending Control for Index [{0}] not found!", IndexName)
+ ' End If
+
+ ' If oDatatable Is Nothing Then
+ ' Logger.Warn("Error in SQL Command: {0}", SqlCommand)
+ ' End If
+
+ ' Select Case oFoundControl.GetType.Name
+ ' Case GetType(DevExpress.XtraEditors.TextEdit).Name
+ ' If oDatatable.Rows.Count > 0 Then
+ ' Dim oFirstRow As DataRow = oDatatable.Rows.Item(0)
+
+ ' If oFirstRow.ItemArray.Length > 0 Then
+ ' Dim oValue = oFirstRow.Item(0).ToString()
+
+ ' Logger.Debug("Setting Value for TextEdit [{0}]: [{1}]", oFoundControl.Name, oValue)
+ ' DirectCast(oFoundControl, DevExpress.XtraEditors.TextEdit).Text = oValue
+ ' End If
+ ' End If
+ ' Case GetType(LookupControl2).Name
+ ' Logger.Debug("Setting Value for LookupControl [{0}]: [{1}]", oFoundControl.Name, "DATATABLE")
+ ' DirectCast(oFoundControl, LookupControl2).DataSource = oDatatable
+ ' Case GetType(ComboBox).Name
+ ' Logger.Debug("Setting Value for Combobox [{0}]: [{1}]", oFoundControl.Name, "DATATABLE")
+ ' DirectCast(oFoundControl, ComboBox).DataSource = oDatatable
+ ' Case Else
+ ' Logger.Debug("Could not set depending control result for [{0}]", oFoundControl.GetType.Name)
+ ' End Select
+ ' Catch ex As Exception
+ ' Logger.Error(ex)
+ ' End Try
+ 'End Sub
+End Class
diff --git a/GUIs.ZooFlow/My Project/Resources.Designer.vb b/GUIs.ZooFlow/My Project/Resources.Designer.vb
index 12a26232..3649f8b8 100644
--- a/GUIs.ZooFlow/My Project/Resources.Designer.vb
+++ b/GUIs.ZooFlow/My Project/Resources.Designer.vb
@@ -80,6 +80,16 @@ Namespace My.Resources
End Get
End Property
+ '''
+ ''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
+ '''
+ Friend ReadOnly Property Find_5650() As System.Drawing.Bitmap
+ Get
+ Dim obj As Object = ResourceManager.GetObject("Find_5650", resourceCulture)
+ Return CType(obj,System.Drawing.Bitmap)
+ End Get
+ End Property
+
'''
''' Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
'''
diff --git a/GUIs.ZooFlow/My Project/Resources.resx b/GUIs.ZooFlow/My Project/Resources.resx
index ef521859..75aeebdb 100644
--- a/GUIs.ZooFlow/My Project/Resources.resx
+++ b/GUIs.ZooFlow/My Project/Resources.resx
@@ -121,22 +121,25 @@
..\Resources\CW_GEFUNDEN_klein.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\CW_klein.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\ZOOFLOW_Home_klein_Eckig.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
..\Resources\GLOBIX_GEFUNDEN_klein.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\GLOBIX_klein.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
..\Resources\ZOOFLOW_Home_klein.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\CW_klein.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+
+ ..\Resources\GLOBIX_klein.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
..\Resources\ZOOFLOW_Home_klein_Cropped.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
-
- ..\Resources\ZOOFLOW_Home_klein_Eckig.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+
+ ..\Resources\Find_5650.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
\ No newline at end of file
diff --git a/GUIs.ZooFlow/Resources/Find_5650.png b/GUIs.ZooFlow/Resources/Find_5650.png
new file mode 100644
index 00000000..a007a651
Binary files /dev/null and b/GUIs.ZooFlow/Resources/Find_5650.png differ
diff --git a/GUIs.ZooFlow/ZooFlow.vbproj b/GUIs.ZooFlow/ZooFlow.vbproj
index 468f66dd..378790d4 100644
--- a/GUIs.ZooFlow/ZooFlow.vbproj
+++ b/GUIs.ZooFlow/ZooFlow.vbproj
@@ -88,6 +88,7 @@
+
@@ -99,6 +100,12 @@
Form
+
+ frmSearchStart.vb
+
+
+ Form
+
@@ -155,6 +162,9 @@
frmFlowForm_Test1.vb
+
+ frmSearchStart.vb
+
frmSettings.vb
@@ -234,6 +244,7 @@
+
diff --git a/GUIs.ZooFlow/frmFlowForm.Designer.vb b/GUIs.ZooFlow/frmFlowForm.Designer.vb
index be68d2f5..2c5fcaf8 100644
--- a/GUIs.ZooFlow/frmFlowForm.Designer.vb
+++ b/GUIs.ZooFlow/frmFlowForm.Designer.vb
@@ -37,9 +37,10 @@ Partial Class frmFlowForm
'
'SucheToolStripMenuItem
'
+ Me.SucheToolStripMenuItem.Image = Global.DigitalData.GUIs.ZooFlow.My.Resources.Resources.Find_5650
Me.SucheToolStripMenuItem.Name = "SucheToolStripMenuItem"
- Me.SucheToolStripMenuItem.Size = New System.Drawing.Size(106, 22)
- Me.SucheToolStripMenuItem.Text = "Suche"
+ Me.SucheToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
+ Me.SucheToolStripMenuItem.Text = "Suchen"
'
'FlowFormTest1ToolStripMenuItem
'
diff --git a/GUIs.ZooFlow/frmFlowForm.vb b/GUIs.ZooFlow/frmFlowForm.vb
index b04e2715..5233cb0f 100644
--- a/GUIs.ZooFlow/frmFlowForm.vb
+++ b/GUIs.ZooFlow/frmFlowForm.vb
@@ -11,6 +11,9 @@ Public Class frmFlowForm
Private ESCHitCount As Integer = 0
Private CurrentState As OnFlowFormStateChangedEvent.FlowFormState = OnFlowFormStateChangedEvent.FlowFormState.Default
+ Private DTIDB_SEARCHES As DataTable
+ Private IDBSearchActive As Boolean = False
+
Const WS_EX_LAYERED As Int32 = &H80000
Public Event ClipboardChanged As EventHandler(Of IDataObject)
@@ -47,7 +50,7 @@ Public Class frmFlowForm
AddHandler MouseClick, New MouseEventHandler(AddressOf Form_MouseClick)
AddHandler MouseMove, New MouseEventHandler(AddressOf Form_MouseMove)
- AddHandler KeyUp, New KeyEventHandler(AddressOf Form_KeyUp)
+ AddHandler KeyUp, AddressOf Form_KeyUp
' === Register As Event Listener ===
EventBus.Instance.Register(Me)
@@ -59,6 +62,19 @@ Public Class frmFlowForm
.Text = "yes"
}
Controls.Add(oButton)
+
+ Dim oSQL = $"SELECT * FROM [dbo].[FNIDB_GET_SEARCH_PROFILES] ({My.Application.User.UserId},'{My.Application.User.Language}')"
+ Dim oDT As DataTable = My.Database_IDB.GetDatatable(oSQL)
+ SucheToolStripMenuItem.Visible = False
+ If Not IsNothing(oDT) Then
+ If oDT.Rows.Count > 0 Then
+ IDBSearchActive = True
+ DTIDB_SEARCHES = oDT
+ SucheToolStripMenuItem.Visible = True
+ End If
+
+ End If
+
End Sub
Private Sub frmFlowForm_Closed(sender As Object, e As EventArgs) Handles Me.Closed
@@ -226,4 +242,15 @@ Public Class frmFlowForm
Private Sub FlowFormTest1ToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles FlowFormTest1ToolStripMenuItem.Click
frmFlowForm_Test1.Show()
End Sub
+
+ Private Sub ContextMenuStrip1_Opening(sender As Object, e As CancelEventArgs) Handles ContextMenuStrip1.Opening
+
+ End Sub
+
+ Private Sub SucheToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SucheToolStripMenuItem.Click
+ Dim oForm As New frmSearchStart(DTIDB_SEARCHES)
+ oForm.Show()
+
+
+ End Sub
End Class
\ No newline at end of file
diff --git a/GUIs.ZooFlow/frmSearchStart.Designer.vb b/GUIs.ZooFlow/frmSearchStart.Designer.vb
new file mode 100644
index 00000000..befeb935
--- /dev/null
+++ b/GUIs.ZooFlow/frmSearchStart.Designer.vb
@@ -0,0 +1,267 @@
+ _
+Partial Class frmSearchStart
+ Inherits System.Windows.Forms.Form
+
+ 'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
+ _
+ Protected Overrides Sub Dispose(ByVal disposing As Boolean)
+ Try
+ If disposing AndAlso components IsNot Nothing Then
+ components.Dispose()
+ End If
+ Finally
+ MyBase.Dispose(disposing)
+ End Try
+ End Sub
+
+ 'Wird vom Windows Form-Designer benötigt.
+ Private components As System.ComponentModel.IContainer
+
+ 'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
+ 'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
+ 'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
+ _
+ Private Sub InitializeComponent()
+ Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(frmSearchStart))
+ Dim WindowsUIButtonImageOptions1 As DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions = New DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions()
+ Dim WindowsUIButtonImageOptions2 As DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions = New DevExpress.XtraBars.Docking2010.WindowsUIButtonImageOptions()
+ Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl()
+ Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem()
+ Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem()
+ Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage()
+ Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
+ Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
+ Me.Panel1 = New System.Windows.Forms.Panel()
+ Me.cmbProfile = New System.Windows.Forms.ComboBox()
+ Me.Label1 = New System.Windows.Forms.Label()
+ Me.WindowsUIButtonPanel1 = New DevExpress.XtraBars.Docking2010.WindowsUIButtonPanel()
+ Me.XtraTabControl1 = New DevExpress.XtraTab.XtraTabControl()
+ Me.XtraTabPage1 = New DevExpress.XtraTab.XtraTabPage()
+ Me.XtraTabPage2 = New DevExpress.XtraTab.XtraTabPage()
+ Me.XtraTabPage3 = New DevExpress.XtraTab.XtraTabPage()
+ Me.XtraTabPage4 = New DevExpress.XtraTab.XtraTabPage()
+ Me.XtraTabPage5 = New DevExpress.XtraTab.XtraTabPage()
+ Me.XtraTabPage6 = New DevExpress.XtraTab.XtraTabPage()
+ Me.XtraTabPage7 = New DevExpress.XtraTab.XtraTabPage()
+ Me.XtraTabPage8 = New DevExpress.XtraTab.XtraTabPage()
+ Me.XtraTabPage9 = New DevExpress.XtraTab.XtraTabPage()
+ Me.XtraTabPage10 = New DevExpress.XtraTab.XtraTabPage()
+ CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit()
+ Me.Panel1.SuspendLayout()
+ CType(Me.XtraTabControl1, System.ComponentModel.ISupportInitialize).BeginInit()
+ Me.XtraTabControl1.SuspendLayout()
+ Me.SuspendLayout()
+ '
+ 'RibbonControl1
+ '
+ Me.RibbonControl1.ExpandCollapseItem.Id = 0
+ Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.BarButtonItem1, Me.BarButtonItem2})
+ Me.RibbonControl1.Location = New System.Drawing.Point(0, 0)
+ Me.RibbonControl1.MaxItemId = 3
+ Me.RibbonControl1.Name = "RibbonControl1"
+ Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1})
+ Me.RibbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.[False]
+ Me.RibbonControl1.Size = New System.Drawing.Size(874, 150)
+ Me.RibbonControl1.StatusBar = Me.RibbonStatusBar1
+ '
+ 'BarButtonItem1
+ '
+ Me.BarButtonItem1.Caption = "Neue Suche"
+ Me.BarButtonItem1.Id = 1
+ Me.BarButtonItem1.ImageOptions.Image = CType(resources.GetObject("BarButtonItem1.ImageOptions.Image"), System.Drawing.Image)
+ Me.BarButtonItem1.ImageOptions.LargeImage = CType(resources.GetObject("BarButtonItem1.ImageOptions.LargeImage"), System.Drawing.Image)
+ Me.BarButtonItem1.Name = "BarButtonItem1"
+ '
+ 'BarButtonItem2
+ '
+ Me.BarButtonItem2.Caption = "Suche speichern"
+ Me.BarButtonItem2.Id = 2
+ Me.BarButtonItem2.ImageOptions.Image = CType(resources.GetObject("BarButtonItem2.ImageOptions.Image"), System.Drawing.Image)
+ Me.BarButtonItem2.ImageOptions.LargeImage = CType(resources.GetObject("BarButtonItem2.ImageOptions.LargeImage"), System.Drawing.Image)
+ Me.BarButtonItem2.Name = "BarButtonItem2"
+ '
+ 'RibbonPage1
+ '
+ Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1})
+ Me.RibbonPage1.Name = "RibbonPage1"
+ Me.RibbonPage1.Text = "Start"
+ '
+ 'RibbonPageGroup1
+ '
+ Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem1)
+ Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem2)
+ Me.RibbonPageGroup1.Name = "RibbonPageGroup1"
+ Me.RibbonPageGroup1.Text = "RibbonPageGroup1"
+ '
+ 'RibbonStatusBar1
+ '
+ Me.RibbonStatusBar1.Location = New System.Drawing.Point(0, 574)
+ Me.RibbonStatusBar1.Name = "RibbonStatusBar1"
+ Me.RibbonStatusBar1.Ribbon = Me.RibbonControl1
+ Me.RibbonStatusBar1.Size = New System.Drawing.Size(874, 27)
+ '
+ 'Panel1
+ '
+ Me.Panel1.BackColor = System.Drawing.Color.Transparent
+ Me.Panel1.Controls.Add(Me.cmbProfile)
+ Me.Panel1.Controls.Add(Me.Label1)
+ Me.Panel1.Dock = System.Windows.Forms.DockStyle.Top
+ Me.Panel1.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
+ Me.Panel1.Location = New System.Drawing.Point(0, 150)
+ Me.Panel1.Margin = New System.Windows.Forms.Padding(2, 3, 2, 3)
+ Me.Panel1.Name = "Panel1"
+ Me.Panel1.Size = New System.Drawing.Size(874, 57)
+ Me.Panel1.TabIndex = 5
+ '
+ 'cmbProfile
+ '
+ Me.cmbProfile.Anchor = CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) _
+ Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
+ Me.cmbProfile.DisplayMember = "DOKART_ID"
+ Me.cmbProfile.FormattingEnabled = True
+ Me.cmbProfile.Location = New System.Drawing.Point(3, 23)
+ Me.cmbProfile.Name = "cmbProfile"
+ Me.cmbProfile.Size = New System.Drawing.Size(869, 21)
+ Me.cmbProfile.TabIndex = 2
+ Me.cmbProfile.ValueMember = "DOKART_ID"
+ '
+ 'Label1
+ '
+ Me.Label1.AutoSize = True
+ Me.Label1.ImeMode = System.Windows.Forms.ImeMode.NoControl
+ Me.Label1.Location = New System.Drawing.Point(3, 3)
+ Me.Label1.Name = "Label1"
+ Me.Label1.Size = New System.Drawing.Size(131, 13)
+ Me.Label1.TabIndex = 1
+ Me.Label1.Text = "Bitte wählen Sie ein Profil:"
+ '
+ 'WindowsUIButtonPanel1
+ '
+ WindowsUIButtonImageOptions1.Image = CType(resources.GetObject("WindowsUIButtonImageOptions1.Image"), System.Drawing.Image)
+ WindowsUIButtonImageOptions2.Image = CType(resources.GetObject("WindowsUIButtonImageOptions2.Image"), System.Drawing.Image)
+ Me.WindowsUIButtonPanel1.Buttons.AddRange(New DevExpress.XtraEditors.ButtonPanel.IBaseButton() {New DevExpress.XtraBars.Docking2010.WindowsUIButton("Suche ausführen", True, WindowsUIButtonImageOptions1, DevExpress.XtraBars.Docking2010.ButtonStyle.PushButton, "", -1, True, Nothing, True, False, True, "Run", -1, False), New DevExpress.XtraBars.Docking2010.WindowsUIButton("Button", True, WindowsUIButtonImageOptions2, DevExpress.XtraBars.Docking2010.ButtonStyle.PushButton, "", -1, True, Nothing, True, False, True, Nothing, -1, False)})
+ Me.WindowsUIButtonPanel1.Dock = System.Windows.Forms.DockStyle.Bottom
+ Me.WindowsUIButtonPanel1.Location = New System.Drawing.Point(0, 506)
+ Me.WindowsUIButtonPanel1.Name = "WindowsUIButtonPanel1"
+ Me.WindowsUIButtonPanel1.Size = New System.Drawing.Size(874, 68)
+ Me.WindowsUIButtonPanel1.TabIndex = 9
+ Me.WindowsUIButtonPanel1.Text = "WindowsUIButtonPanel1"
+ '
+ 'XtraTabControl1
+ '
+ Me.XtraTabControl1.Dock = System.Windows.Forms.DockStyle.Fill
+ Me.XtraTabControl1.HeaderLocation = DevExpress.XtraTab.TabHeaderLocation.Bottom
+ Me.XtraTabControl1.Location = New System.Drawing.Point(0, 207)
+ Me.XtraTabControl1.Name = "XtraTabControl1"
+ Me.XtraTabControl1.SelectedTabPage = Me.XtraTabPage1
+ Me.XtraTabControl1.Size = New System.Drawing.Size(874, 299)
+ Me.XtraTabControl1.TabIndex = 12
+ Me.XtraTabControl1.TabPages.AddRange(New DevExpress.XtraTab.XtraTabPage() {Me.XtraTabPage1, Me.XtraTabPage2, Me.XtraTabPage3, Me.XtraTabPage4, Me.XtraTabPage5, Me.XtraTabPage6, Me.XtraTabPage7, Me.XtraTabPage8, Me.XtraTabPage9, Me.XtraTabPage10})
+ '
+ 'XtraTabPage1
+ '
+ Me.XtraTabPage1.Name = "XtraTabPage1"
+ Me.XtraTabPage1.Size = New System.Drawing.Size(872, 274)
+ Me.XtraTabPage1.Text = "Search#1"
+ '
+ 'XtraTabPage2
+ '
+ Me.XtraTabPage2.Name = "XtraTabPage2"
+ Me.XtraTabPage2.Size = New System.Drawing.Size(872, 274)
+ Me.XtraTabPage2.Text = "Search#2"
+ '
+ 'XtraTabPage3
+ '
+ Me.XtraTabPage3.Name = "XtraTabPage3"
+ Me.XtraTabPage3.Size = New System.Drawing.Size(714, 274)
+ Me.XtraTabPage3.Text = "Search#3"
+ '
+ 'XtraTabPage4
+ '
+ Me.XtraTabPage4.Name = "XtraTabPage4"
+ Me.XtraTabPage4.Size = New System.Drawing.Size(714, 274)
+ Me.XtraTabPage4.Text = "Search#4"
+ '
+ 'XtraTabPage5
+ '
+ Me.XtraTabPage5.Name = "XtraTabPage5"
+ Me.XtraTabPage5.Size = New System.Drawing.Size(714, 274)
+ Me.XtraTabPage5.Text = "Search#5"
+ '
+ 'XtraTabPage6
+ '
+ Me.XtraTabPage6.Name = "XtraTabPage6"
+ Me.XtraTabPage6.Size = New System.Drawing.Size(714, 274)
+ Me.XtraTabPage6.Text = "Search#6"
+ '
+ 'XtraTabPage7
+ '
+ Me.XtraTabPage7.Name = "XtraTabPage7"
+ Me.XtraTabPage7.Size = New System.Drawing.Size(714, 274)
+ Me.XtraTabPage7.Text = "Search#7"
+ '
+ 'XtraTabPage8
+ '
+ Me.XtraTabPage8.Name = "XtraTabPage8"
+ Me.XtraTabPage8.Size = New System.Drawing.Size(714, 274)
+ Me.XtraTabPage8.Text = "Search#8"
+ '
+ 'XtraTabPage9
+ '
+ Me.XtraTabPage9.Name = "XtraTabPage9"
+ Me.XtraTabPage9.Size = New System.Drawing.Size(872, 274)
+ Me.XtraTabPage9.Text = "Search#9"
+ '
+ 'XtraTabPage10
+ '
+ Me.XtraTabPage10.Name = "XtraTabPage10"
+ Me.XtraTabPage10.Size = New System.Drawing.Size(872, 274)
+ Me.XtraTabPage10.Text = "Search#10"
+ '
+ 'frmSearchStart
+ '
+ Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
+ Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
+ Me.ClientSize = New System.Drawing.Size(874, 601)
+ Me.Controls.Add(Me.XtraTabControl1)
+ Me.Controls.Add(Me.WindowsUIButtonPanel1)
+ Me.Controls.Add(Me.Panel1)
+ Me.Controls.Add(Me.RibbonStatusBar1)
+ Me.Controls.Add(Me.RibbonControl1)
+ Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
+ Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
+ Me.Name = "frmSearchStart"
+ Me.Text = "frmSearchStart"
+ Me.TopMost = True
+ CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).EndInit()
+ Me.Panel1.ResumeLayout(False)
+ Me.Panel1.PerformLayout()
+ CType(Me.XtraTabControl1, System.ComponentModel.ISupportInitialize).EndInit()
+ Me.XtraTabControl1.ResumeLayout(False)
+ Me.ResumeLayout(False)
+ Me.PerformLayout()
+
+ End Sub
+
+ Friend WithEvents RibbonControl1 As DevExpress.XtraBars.Ribbon.RibbonControl
+ Friend WithEvents RibbonPage1 As DevExpress.XtraBars.Ribbon.RibbonPage
+ Friend WithEvents RibbonPageGroup1 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
+ Friend WithEvents RibbonStatusBar1 As DevExpress.XtraBars.Ribbon.RibbonStatusBar
+ Friend WithEvents Panel1 As Panel
+ Friend WithEvents cmbProfile As ComboBox
+ Friend WithEvents Label1 As Label
+ Friend WithEvents WindowsUIButtonPanel1 As DevExpress.XtraBars.Docking2010.WindowsUIButtonPanel
+ Friend WithEvents BarButtonItem1 As DevExpress.XtraBars.BarButtonItem
+ Friend WithEvents BarButtonItem2 As DevExpress.XtraBars.BarButtonItem
+ Friend WithEvents XtraTabControl1 As DevExpress.XtraTab.XtraTabControl
+ Friend WithEvents XtraTabPage1 As DevExpress.XtraTab.XtraTabPage
+ Friend WithEvents XtraTabPage2 As DevExpress.XtraTab.XtraTabPage
+ Friend WithEvents XtraTabPage3 As DevExpress.XtraTab.XtraTabPage
+ Friend WithEvents XtraTabPage4 As DevExpress.XtraTab.XtraTabPage
+ Friend WithEvents XtraTabPage5 As DevExpress.XtraTab.XtraTabPage
+ Friend WithEvents XtraTabPage6 As DevExpress.XtraTab.XtraTabPage
+ Friend WithEvents XtraTabPage7 As DevExpress.XtraTab.XtraTabPage
+ Friend WithEvents XtraTabPage8 As DevExpress.XtraTab.XtraTabPage
+ Friend WithEvents XtraTabPage9 As DevExpress.XtraTab.XtraTabPage
+ Friend WithEvents XtraTabPage10 As DevExpress.XtraTab.XtraTabPage
+End Class
diff --git a/GUIs.ZooFlow/frmSearchStart.resx b/GUIs.ZooFlow/frmSearchStart.resx
new file mode 100644
index 00000000..2dbd68ce
--- /dev/null
+++ b/GUIs.ZooFlow/frmSearchStart.resx
@@ -0,0 +1,288 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAbdEVYdFRpdGxlAEFkZDtQbHVzO0JhcnM7UmliYm9u
+ O5UGMy8AAACYSURBVDhPpZPRDYAgDEQZxUH4ZjqZwmFYh8QBtI/YBEzBmH68RHvXwwKGGOObJGShCPWB
+ Z2pog79/2YRdOIVrAhoevEMAhUOwmizwthANINUyrqCnBTDX7LN1AUujJyGyOZYBVgGQEdlhS4SvgILI
+ MfVFbZrReysFd4B7BPcmuo8RXBcJ3FdZQ0idjQNoeFoz9AHKj985hhsZRV9cJDh5ygAAAABJRU5ErkJg
+ gg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAbdEVYdFRpdGxlAEFkZDtQbHVzO0JhcnM7UmliYm9u
+ O5UGMy8AAAFASURBVFhHzZexEcIwDEWZgIpxUtDRMQMDMEi2oaVkCzo6Vkhr9DjsI+Gb2AEiinfnC9L3
+ x5blZBFCcEU+nJM0aJpmjKWxNVrjaFyM7gFjnvEbMcQqjUSNgZWxN05GKIRYcshVmsUGNsbBUJOUQC4a
+ L9olBnbG2VDCNaCBVk9/zAAJV0MJTgGtnol3Bliyb/zzIWim7cgZoGhK93xtxDzGKmYI2vfCzBmgclWi
+ IuZEVIyCOaQBzm7NUZtqgDmWygANRCXkmGoAtsoAXUwF5/jEQKsM0EpVcI5PDByVAfq5Cn6u9lpyp+Oi
+ DHCpqOChaC1Ks/tLA+5b4F6E7sfQvRG5t2JwvYzA/ToG1xeSiOsrWYSEb6wEGr3JocQAsGSlNaEgNy37
+ M6UGgKKhcmuOKLHk3AtOUWMg8ttPMy/kw/kIixsQHeuLUpLJLQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
+ dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAASdEVYdFRpdGxlAFNhdmUgQXM7U2F2ZZVZ6PsAAAB0
+ SURBVDhPzYxRDoAgDEO9ERfYvf3ibLgSqtsUxA8SSR5rm62biGSlAH3wVVtCnuGJOwiLp3/KydoCw3wB
+ UO1m0+8Fs6wpsCHQrBLzyHQB9wwJ+acCqxtpWBC8jksTZ3rEAoIM387FHlzmIUHmghH/KLgj5QBN+0Aj
+ rFmxMgAAAABJRU5ErkJggg==
+
+
+
+
+ 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
+ On2zdlYAAAAASUVORK5CYII=
+
+
+
+
+ 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
+ AAAgAAAAAQAEAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICA
+ AACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAP8AAAAAAAAPd/AAAA
+ AAAPd3fwAAAAAA93d38AAAAAAPd3d///8AAAD3d3d3d/8AAA93d3d3fwAAAPd3//d38AAA93///3fwAA
+ D3f///d/AAAPd///938AAA93f/93fwAAAPd3d3fwAAAA/3d3f/AAAAAA///wAP//AADn/wAAw/8AAIH/
+ AACA/wAAwAcAAOABAADwAQAA+AAAAPgAAAD4AAAA+AAAAPgAAAD8AQAA/AEAAP8HAAAoAAAAEAAAACAA
+ AAABAAgAAAAAAAABAAAAAAAAAAAAAAABAAAAAQAAAAAAAEJCQgBNTU0AWFhYAGRkZABubW4AeXl5AIaG
+ hgDg4OAA5uTlAOvr6wDx7/AA9vb2APr6+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAMDAAAAAAA
+ AAAAAAAAAAAKBAcMAAAAAAAAAAAAAAAMBAEBBwwAAAAAAAAAAAAADAQBAQEHDAAAAAAAAAAAAAAKBAEB
+ AQcMDAwMDAAAAAAAAAoEAQEBBAEBAQYIDQAAAAAACgQBAQEBAQEBAggAAAAAAAAKAwEGCAsIBQEGDAAA
+ AAAADAEBCAsLCwgBAQwAAAAAAAgBAQsLCwsLAwEMAAAAAAAMAQEICwsLCAEBDAAAAAAADAYBBggLCAUB
+ BgwAAAAAAAAIAgEBAQEBAggAAAAAAAAADQgGAQEBBggNAAAAAAAAAAAADAwMDAwAAAD//wAA5/8AAMP/
+ AACB/wAAgP8AAMAHAADgAQAA8AEAAPgAAAD4AAAA+AAAAPgAAAD4AAAA/AEAAPwBAAD/BwAAKAAAABAA
+ AAAgAAAAAQAgAAAAAABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29jD29vYwAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29jD29vbv9vb27/b2
+ 9jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29jDq6urvZGRk/4aG
+ hv/29vbv9vb2MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb29jD29vbvZGRk/0JC
+ Qv9CQkL/hoaG//b29u/29vYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD29vYw9vb272Rk
+ ZP9CQkL/QkJC/0JCQv+Ghob/9vb27/b29jAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPb2
+ 9jDq6urvZGRk/0JCQv9CQkL/QkJC/4aGhv/29vb/9vb2//b29v/29vb/9vb2z/b29lAAAAAAAAAAAAAA
+ AAAAAAAA9vb2MOrq6u9kZGT/QkJC/0JCQv9CQkL/ZGRk/0JCQv9CQkL/QkJC/3p6ev/g4OD/9vb2gAAA
+ AAAAAAAAAAAAAAAAAAD29vYw6urq72RkZP9CQkL/QkJC/0JCQv9CQkL/QkJC/0JCQv9CQkL/TU1N/+Dg
+ 4P/29vZQAAAAAAAAAAAAAAAAAAAAAPb29jDr6+v/WVlZ/0JCQv95eHj/5uTl//Hv8P/m5OX/bm1u/0JC
+ Qv96enr/9vb2zwAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2/0JCQv9CQkL/5uTl//Hv8P/x7/D/8e/w/+bk
+ 5f9CQkL/QkJC//b29v8AAAAAAAAAAAAAAAAAAAAAAAAAAODg4P9CQkL/QkJC//Hv8P/x7/D/8e/w//Hv
+ 8P/x7/D/WFhY/0JCQv/29vb/AAAAAAAAAAAAAAAAAAAAAAAAAAD29vb/QkJC/0JCQv/m5OX/8e/w//Hv
+ 8P/x7/D/5uTl/0JCQv9CQkL/9vb2/wAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2z3p6ev9CQkL/eXh4/+bk
+ 5f/x7/D/5uTl/25tbv9CQkL/enp6//b29s8AAAAAAAAAAAAAAAAAAAAAAAAAAPb29lDg4OD/TU1N/0JC
+ Qv9CQkL/QkJC/0JCQv9CQkL/TU1N/+Dg4P/29vZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9vb2gODg
+ 4P96enr/QkJC/0JCQv9CQkL/enp6/+Dg4P/29vaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAD29vZQ9vb2z/b29v/29vb/9vb2//b29s/29vZQAAAAAAAAAADn/wAAw/8AAIH/AAAA/wAAAH8AAIAD
+ AADAAQAA4AAAAPAAAAD4AAAA+AAAAPgAAAD4AAAA+AAAAPwBAAD+AwAA
+
+
+
\ No newline at end of file
diff --git a/GUIs.ZooFlow/frmSearchStart.vb b/GUIs.ZooFlow/frmSearchStart.vb
new file mode 100644
index 00000000..c7e72b9b
--- /dev/null
+++ b/GUIs.ZooFlow/frmSearchStart.vb
@@ -0,0 +1,125 @@
+Imports DigitalData.Modules.Logging
+Imports DevExpress.XtraTab
+Public Class frmSearchStart
+ Private Logger As Logger
+ Private DTSearchProfiles As DataTable
+ Private TabSelected As XtraTabPage
+ Private PSEARCH_ID As Integer = 0
+ Public FormLoaded As Boolean = False
+ Private Const DEFAULT_X As Integer = 10
+ Private Const DEFAULT_Y As Integer = 10
+
+ Public Sub New(pDTSearchProfiles As DataTable)
+ ' Dieser Aufruf ist für den Designer erforderlich.
+ InitializeComponent()
+
+ ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
+ DTSearchProfiles = pDTSearchProfiles
+ Logger = My.LogConfig.GetLogger()
+ End Sub
+
+ Private Sub WindowsUIButtonPanel1_Click(sender As Object, e As EventArgs) Handles WindowsUIButtonPanel1.Click
+
+ End Sub
+
+ Private Sub frmSearchStart_Load(sender As Object, e As EventArgs) Handles Me.Load
+ Try
+ Me.Panel1.Visible = False
+ For Each oTab As XtraTabPage In XtraTabControl1.TabPages
+ oTab.PageVisible = False
+ Next
+ If DTSearchProfiles.Rows.Count > 1 Then
+ cmbProfile.DataSource = DTSearchProfiles
+ cmbProfile.ValueMember = DTSearchProfiles.Columns("SEARCH_PROFILE_ID").ColumnName
+ cmbProfile.DisplayMember = DTSearchProfiles.Columns("TITLE").ColumnName
+ cmbProfile.AutoCompleteMode = AutoCompleteMode.Suggest
+ cmbProfile.AutoCompleteSource = AutoCompleteSource.ListItems
+ cmbProfile.SelectedIndex = -1
+ Me.Panel1.Visible = True
+ Else
+ TabSelected = XtraTabControl1.TabPages(0)
+ TabSelected.PageVisible = True
+ PSEARCH_ID = DTSearchProfiles.Rows(0).Item("SEARCH_PROFILE_ID")
+ TabSelected.Text = DTSearchProfiles.Rows(0).Item("TITLE")
+ Load_Search_Attributes()
+ End If
+
+ Catch ex As Exception
+ Logger.Error(ex.Message)
+ MsgBox(ex.Message, MsgBoxStyle.Critical, "Unexpected error while loading ProfileSearches:")
+ End Try
+ FormLoaded = True
+ End Sub
+ Sub Load_Search_Attributes()
+ Dim oSQL = $"SELECT * FROM VWIDB_SEARCH_PROFILE_ATTRIBUTES WHERE SEARCH_PROFIL_ID = {PSEARCH_ID} ORDER BY [SEQUENCE]"
+ Dim oDT As DataTable = My.Database_IDB.GetDatatable(oSQL)
+ Dim oXPosition As Integer = 10
+ Dim oYPosition As Integer = 10
+ Dim oControlXPosition As Integer = 33
+ Dim oControlCount As Integer = 1
+ Dim oControlRow As Integer = 0
+ Dim oControls As New ClassControlCreator(TabSelected, Me)
+ For Each oAttributeRow As DataRow In oDT.Rows
+ Dim oAttriName As String = oAttributeRow.Item("ATTRIBUTE_TITLE").ToString
+ Dim oAttriID As String = oAttributeRow.Item("ATTRIBUTE_ID").ToString
+ Dim oAttriTYPE As String = oAttributeRow.Item("ATTRIBUTE_TYPE").ToString
+ If oControlCount = 1 Or oControlCount = 3 Or oControlCount = 5 Then
+ 'linke Spalte
+ oControlRow += 1
+ End If
+ Select Case oControlCount
+ Case 2
+ oXPosition = oXPosition + 150 + 20
+ End Select
+ Select Case oControlRow
+ Case 1
+ oYPosition = DEFAULT_Y
+ If oControlCount > 1 Then
+ oXPosition = DEFAULT_X + 170
+ End If
+ Case 2
+ oYPosition = DEFAULT_Y + 150 + 20
+ If oControlCount = 4 Then
+ oXPosition = DEFAULT_X + 170
+ End If
+
+ End Select
+
+ addLabel(oAttriName, oXPosition, oYPosition)
+
+
+
+
+ Dim oMyControl As Control
+ Select Case oAttriTYPE
+ Case "VARCHAR"
+ oMyControl = oControls.CreateExistingGridControl(oAttributeRow, oXPosition, oYPosition + 25)
+ Case "DATE"
+ End Select
+ TabSelected.Controls.Add(oMyControl)
+
+
+ oControlCount += 1
+ Next
+ End Sub
+ Sub addLabel(pAttrName As String, pXPos As Integer, ylbl As Integer)
+ Dim lbl As New Label With {
+ .Name = "lbl" & pAttrName,
+ .AutoSize = True,
+ .Text = pAttrName,
+ .Location = New Point(pXPos, ylbl)
+ }
+
+ TabSelected.Controls.Add(lbl)
+ End Sub
+ Private Sub WindowsUIButtonPanel1_ButtonClick(sender As Object, e As DevExpress.XtraBars.Docking2010.ButtonEventArgs) Handles WindowsUIButtonPanel1.ButtonClick
+ Select Case e.Button.Properties.Tag.ToString
+ Case "Run"
+ MsgBox("Start Search")
+ End Select
+ End Sub
+
+ Private Sub XtraTabControl1_SelectedPageChanged(sender As Object, e As DevExpress.XtraTab.TabPageChangedEventArgs) Handles XtraTabControl1.SelectedPageChanged
+ TabSelected = XtraTabControl1.SelectedTabPage
+ End Sub
+End Class
\ No newline at end of file