Vor GridControl Length

This commit is contained in:
Developer01
2026-02-26 10:37:05 +01:00
parent 743ef3fe22
commit 54744a0531
4 changed files with 1529 additions and 1119 deletions

View File

@@ -1,5 +1,77 @@
Public Class ClassIDBData Public Class ClassIDBData
Public DTVWIDB_BE_ATTRIBUTE As DataTable Public DTVWIDB_BE_ATTRIBUTE As DataTable
Public IDBSystemIndices As List(Of String)
''' <summary>
''' Wenn True, werden SQL-Statements nicht sofort ausgeführt,
''' sondern in <see cref="_sqlBatch"/> gesammelt.
''' </summary>
Public Property BatchMode As Boolean = False
Private _sqlBatch As New List(Of String)
''' <summary>
''' Startet den Batch-Sammelmodus.
''' </summary>
Public Sub BeginBatch()
_sqlBatch.Clear()
BatchMode = True
End Sub
''' <summary>
''' Führt alle gesammelten SQL-Statements als einen einzigen String
''' an ExecuteNonQueryIDB weiter. Jeder Block wird in BEGIN...END
''' gekapselt, damit DECLARE-Variablen nicht kollidieren.
''' </summary>
''' <returns>True wenn erfolgreich</returns>
Public Function CommitBatch() As Boolean
BatchMode = False
If _sqlBatch.Count = 0 Then Return True
Try
Dim oStatements = _sqlBatch.
Where(Function(s) Not String.IsNullOrWhiteSpace(s)).
ToList()
' @NEW_OBJ_MD_ID pro Statement eindeutig umbenennen → kein Namenskonflikt im Batch
Dim oNumberedStatements As New List(Of String)
Dim oIndex As Integer = 0
For Each oStatement As String In oStatements
Dim oNumbered = oStatement.Replace("@NEW_OBJ_MD_ID", $"@NEW_OBJ_MD_ID_{oIndex}")
oNumberedStatements.Add(oNumbered)
oIndex += 1
Next
Dim oBatchSQL = String.Join(vbNewLine, oNumberedStatements)
LOGGER.Debug($"CommitBatch - Executing {oStatements.Count} statements as one batch:{vbNewLine}{oBatchSQL}")
Dim oResult = DatabaseFallback.ExecuteNonQueryIDB(oBatchSQL)
_sqlBatch.Clear()
Return oResult
Catch ex As Exception
LOGGER.Error(ex)
_sqlBatch.Clear()
Return False
End Try
End Function
''' <summary>
''' Verwirft alle gesammelten Statements ohne Ausführung.
''' </summary>
Public Sub RollbackBatch()
_sqlBatch.Clear()
BatchMode = False
End Sub
''' <summary>
''' Führt ein SQL-Statement aus sofort oder gesammelt je nach BatchMode.
''' </summary>
Private Function ExecuteOrQueue(oSQL As String) As Boolean
If BatchMode Then
_sqlBatch.Add(oSQL)
LOGGER.Debug($"BatchMode - Queued statement: {oSQL}")
Return True
Else
Return DatabaseFallback.ExecuteNonQueryIDB(oSQL)
End If
End Function
''' <summary> ''' <summary>
''' Gets all indices by BusinessEntity. ''' Gets all indices by BusinessEntity.
''' </summary> ''' </summary>
@@ -7,15 +79,16 @@
''' <returns>Array with all Indices</returns> ''' <returns>Array with all Indices</returns>
''' <remarks></remarks> ''' <remarks></remarks>
''' '''
Public Function Init() Public Function Init() As Boolean
Dim oSQL = $"SELECT DISTINCT ATTR_TITLE, TYP_ID, TYP_ID as [TYPE_ID] FROM VWIDB_BE_ATTRIBUTE WHERE SYS_ATTRIBUTE = 0 ORDER BY ATTR_TITLE" Dim oSQL = $"SELECT DISTINCT ATTR_TITLE, TYP_ID, TYP_ID as [TYPE_ID] FROM VWIDB_BE_ATTRIBUTE WHERE SYS_ATTRIBUTE = 0 ORDER BY ATTR_TITLE"
DTVWIDB_BE_ATTRIBUTE = DatabaseFallback.GetDatatableIDB(oSQL) DTVWIDB_BE_ATTRIBUTE = DatabaseFallback.GetDatatableIDB(oSQL)
If IsNothing(DTVWIDB_BE_ATTRIBUTE) Then If IsNothing(DTVWIDB_BE_ATTRIBUTE) Then
oSQL = $"SELECT DISTINCT ATTR_TITLE, TYP_ID, TYP_ID as [TYPE_ID] FROM VWIDB_BE_ATTRIBUTE ORDER BY ATTR_TITLE " oSQL = $"SELECT DISTINCT ATTR_TITLE, TYP_ID, TYP_ID as [TYPE_ID] FROM VWIDB_BE_ATTRIBUTE ORDER BY ATTR_TITLE "
DTVWIDB_BE_ATTRIBUTE = DatabaseFallback.GetDatatableIDB(oSQL) DTVWIDB_BE_ATTRIBUTE = DatabaseFallback.GetDatatableIDB(oSQL)
End If End If
Return True
End Function End Function
Public IDBSystemIndices As List(Of String)
Public Function GetIndicesByBE(ByVal BusinessEntity As String) As String() Public Function GetIndicesByBE(ByVal BusinessEntity As String) As String()
Try Try
Dim aNames(4) As String Dim aNames(4) As String
@@ -140,8 +213,9 @@
End If End If
Dim oDELSQL = $"EXEC PRIDB_DELETE_TERM_OBJECT_METADATA {CURRENT_DOC_ID},'{oAttributeName}','{oTerm2Delete}','{USER_USERNAME}','{USER_LANGUAGE}',{oID_IS_FOREIGN}" Dim oDELSQL = $"EXEC PRIDB_DELETE_TERM_OBJECT_METADATA {CURRENT_DOC_ID},'{oAttributeName}','{oTerm2Delete}','{USER_USERNAME}','{USER_LANGUAGE}',{oID_IS_FOREIGN}"
DatabaseFallback.ExecuteNonQueryIDB(oDELSQL) LOGGER.Debug($"Delete_Term_Object_From_Metadata: {oDELSQL}")
'DatabaseFallback.ExecuteNonQueryIDB(oDELSQL)
Return ExecuteOrQueue(oDELSQL)
Catch ex As Exception Catch ex As Exception
LOGGER.Error(ex) LOGGER.Error(ex)
Return Nothing Return Nothing
@@ -151,8 +225,9 @@
Public Function Delete_AttributeData(pIDB_OBJID As Int64, pAttributeName As String) As Object Public Function Delete_AttributeData(pIDB_OBJID As Int64, pAttributeName As String) As Object
Try Try
Dim oDELSQL = $"EXEC PRIDB_DELETE_ATTRIBUTE_DATA {pIDB_OBJID},'{pAttributeName}','{USER_USERNAME}'" Dim oDELSQL = $"EXEC PRIDB_DELETE_ATTRIBUTE_DATA {pIDB_OBJID},'{pAttributeName}','{USER_USERNAME}'"
DatabaseFallback.ExecuteNonQueryIDB(oDELSQL) LOGGER.Debug($"Delete_Attribute_Data: {oDELSQL}")
' DatabaseFallback.ExecuteNonQueryIDB(oDELSQL)
Return ExecuteOrQueue(oDELSQL)
Catch ex As Exception Catch ex As Exception
LOGGER.Error(ex) LOGGER.Error(ex)
Return Nothing Return Nothing
@@ -165,15 +240,15 @@
Dim omytype = oNewValue.GetType.ToString Dim omytype = oNewValue.GetType.ToString
If omytype = "System.Data.DataTable" Then If omytype = "System.Data.DataTable" Then
Dim oDTMyNewValues As DataTable = oNewValue Dim oDTMyNewValues As DataTable = oNewValue
Dim oOldAttributeResult Dim oAttributeResultFromDB
Dim oTypeOldResult Dim oTypeOldResult
If CheckDeleted = True Then If CheckDeleted = True Then
oOldAttributeResult = GetVariableValue(oAttributeName, oIDBTyp) oAttributeResultFromDB = GetVariableValue(oAttributeName, oIDBTyp)
oTypeOldResult = oOldAttributeResult.GetType.ToString oTypeOldResult = oAttributeResultFromDB.GetType.ToString
If oTypeOldResult = "System.Data.DataTable" Then If TypeOf oAttributeResultFromDB Is DataTable Then
Dim myOldValues As DataTable = oOldAttributeResult Dim myOldValues As DataTable = oAttributeResultFromDB
If myOldValues.Rows.Count > 1 Then If myOldValues.Rows.Count >= 1 Then
'now Checking whether the old row still remains in Vector? If not it will be deleted as it cannot be replaced in multivalues 'now Checking whether the old row still remains in Vector? If not it will be deleted as it cannot be replaced in multivalues
For Each oOldValueRow As DataRow In myOldValues.Rows For Each oOldValueRow As DataRow In myOldValues.Rows
@@ -199,27 +274,26 @@
'### Old Value is a single value ### '### Old Value is a single value ###
If oDTMyNewValues.Rows.Count > 1 Then If oDTMyNewValues.Rows.Count > 1 Then
'### there is more than one new value ### '### there is more than one new value ###
Dim oExists As Boolean Dim oExists As Boolean = False
For Each oNewValueRow As DataRow In oDTMyNewValues.Rows For Each oNewValueRow As DataRow In oDTMyNewValues.Rows
oExists = False LOGGER.Debug($"Checking oldValue[{oAttributeResultFromDB}] vs NewValue [{oNewValueRow.Item(1)}]")
Dim oInfo1 = $"Checking oldValue[{oOldAttributeResult}] vs NewValue [{oNewValueRow.Item(1)}]" If oNewValueRow.Item(1).ToString.ToUpper = oAttributeResultFromDB.ToString.ToUpper Then
If oNewValueRow.Item(1).ToString.ToUpper = oOldAttributeResult.ToString.ToUpper Then
oExists = True oExists = True
Exit For ' ← sobald gefunden, abbrechen
End If End If
Next Next
If oExists = False Then If oExists = False Then
Dim oInfo2 = $"Value [{oOldAttributeResult}] no longer existing in Vector-Attribute [{oAttributeName}] - will be deleted!" LOGGER.Debug($"Value [{oAttributeResultFromDB}] no longer existing in Attribute [{oAttributeName}] - will be deleted!")
LOGGER.Debug(oInfo2)
'SetVariableValue(CURRENT_PROFILE_LOG_INDEX, oInfo2) 'SetVariableValue(CURRENT_PROFILE_LOG_INDEX, oInfo2)
Delete_Term_Object_From_Metadata(oAttributeName, oOldAttributeResult) Delete_Term_Object_From_Metadata(oAttributeName, oAttributeResultFromDB)
End If End If
Else Else
'### there is only ONE new value ### '### there is only ONE new value ###
If oDTMyNewValues.Rows(0).Item(1) <> oOldAttributeResult Then If oDTMyNewValues.Rows(0).Item(1) <> oAttributeResultFromDB Then
Dim oInfo = $"Value [{oOldAttributeResult}] of Attribute [{oAttributeName}] obviously was updated during runtime - will be deleted!" Dim oInfo = $"Value [{oAttributeResultFromDB}] of Attribute [{oAttributeName}] obviously was updated during runtime - will be deleted!"
LOGGER.Debug(oInfo) LOGGER.Debug(oInfo)
SetVariableValue(CURRENT_PROFILE_LOG_INDEX, oInfo) SetVariableValue(CURRENT_PROFILE_LOG_INDEX, oInfo)
Delete_Term_Object_From_Metadata(oAttributeName, oOldAttributeResult) Delete_Term_Object_From_Metadata(oAttributeName, oAttributeResultFromDB)
Else Else
LOGGER.Debug($"Attributvalue of [{oAttributeName}] did not change!") LOGGER.Debug($"Attributvalue of [{oAttributeName}] did not change!")
End If End If
@@ -231,22 +305,24 @@
End If End If
For Each oNewValueRow As DataRow In oDTMyNewValues.Rows For Each oNewValueRow As DataRow In oDTMyNewValues.Rows
Dim oSuccess As Boolean = False 'Dim oSuccess As Boolean = False
Dim oVALUE = oNewValueRow.Item(1).ToString Dim oVALUE = oNewValueRow.Item(1).ToString
oVALUE = oVALUE.Replace("'", "''") oVALUE = oVALUE.Replace("'", "''")
Dim oPRSQL = $"DECLARE @NEW_OBJ_MD_ID BIGINT " & vbNewLine & $"EXEC PRIDB_NEW_OBJ_DATA {CURRENT_DOC_ID},'{oAttributeName}','{USER_USERNAME}','{oVALUE}','{USER_LANGUAGE}',0,@OMD_ID = @NEW_OBJ_MD_ID OUTPUT" Dim oPRSQL = $"DECLARE @NEW_OBJ_MD_ID BIGINT " & vbNewLine & $"EXEC PRIDB_NEW_OBJ_DATA {CURRENT_DOC_ID},'{oAttributeName}','{USER_USERNAME}','{oVALUE}','{USER_LANGUAGE}',0,@OMD_ID = @NEW_OBJ_MD_ID OUTPUT"
LOGGER.Debug(oPRSQL) LOGGER.Debug(oPRSQL)
oSuccess = DatabaseFallback.ExecuteNonQueryIDB(oPRSQL) 'oSuccess = DatabaseFallback.ExecuteNonQueryIDB(oPRSQL)
If oSuccess = False Then If Not ExecuteOrQueue(oPRSQL) Then Return False
Return False 'If oSuccess = False Then
End If ' Return False
'End If
Next Next
Return True Return True
Else Else
'oNewValue = oNewValue.Replace("'", "' + NCHAR(39) + '") 'oNewValue = oNewValue.Replace("'", "' + NCHAR(39) + '")
Dim oFNSQL = $"DECLARE @NEW_OBJ_MD_ID BIGINT " & vbNewLine & $"EXEC PRIDB_NEW_OBJ_DATA {CURRENT_DOC_ID},'{oAttributeName}','{USER_USERNAME}','{oNewValue}','{USER_LANGUAGE}',0,@OMD_ID = @NEW_OBJ_MD_ID OUTPUT" Dim oPRIDB_NEW_OBJ_DATA = $"DECLARE @NEW_OBJ_MD_ID BIGINT " & vbNewLine & $"EXEC PRIDB_NEW_OBJ_DATA {CURRENT_DOC_ID},'{oAttributeName}','{USER_USERNAME}','{oNewValue}','{USER_LANGUAGE}',0,@OMD_ID = @NEW_OBJ_MD_ID OUTPUT"
LOGGER.Debug(oFNSQL) LOGGER.Debug(oPRIDB_NEW_OBJ_DATA)
Return DatabaseFallback.ExecuteNonQueryIDB(oFNSQL) ' Return DatabaseFallback.ExecuteNonQueryIDB(oPRIDB_NEW_OBJ_DATA)
Return ExecuteOrQueue(oPRIDB_NEW_OBJ_DATA)
End If End If
Catch ex As Exception Catch ex As Exception

View File

@@ -15,6 +15,7 @@ Imports DevExpress.XtraGrid.Views.Grid
Imports DevExpress.XtraGrid.Views.Grid.ViewInfo Imports DevExpress.XtraGrid.Views.Grid.ViewInfo
Imports DevExpress.XtraNavBar Imports DevExpress.XtraNavBar
Imports DevExpress.XtraPrinting Imports DevExpress.XtraPrinting
Imports DevExpress.XtraSplashScreen
Imports DigitalData.GUIs.Common Imports DigitalData.GUIs.Common
Imports DigitalData.Modules.Base Imports DigitalData.Modules.Base
Imports DigitalData.Modules.EDMI.API.Constants Imports DigitalData.Modules.EDMI.API.Constants
@@ -61,6 +62,7 @@ Public Class frmMain
Private DetailLinkActive As Boolean = False Private DetailLinkActive As Boolean = False
Private FRONTEND_ACTION As String = "NONE" Private FRONTEND_ACTION As String = "NONE"
Private Ev_Filter_Panel_Closed As Boolean = False Private Ev_Filter_Panel_Closed As Boolean = False
Private _overlayActive As Boolean = False
Dim omsgOpenWorkflow As String Dim omsgOpenWorkflow As String
Dim omsgTitleWarning As String Dim omsgTitleWarning As String
@@ -1398,6 +1400,13 @@ Public Class frmMain
' HAUPTLADEMETHODE - Koordiniert den gesamten Ladevorgang ' HAUPTLADEMETHODE - Koordiniert den gesamten Ladevorgang
' ======================================== ' ========================================
Private Async Function Decide_Load(pIsFormLoad As Boolean, Optional ForceReload As Boolean = False) As Tasks.Task Private Async Function Decide_Load(pIsFormLoad As Boolean, Optional ForceReload As Boolean = False) As Tasks.Task
Dim oHandle As Object = Nothing
Dim overlayStartedHere As Boolean = False
If Not _overlayActive Then
oHandle = SplashScreenManager.ShowOverlayForm(Me)
_overlayActive = True
overlayStartedHere = True
End If
Dim perfStart As DateTime = DateTime.MinValue Dim perfStart As DateTime = DateTime.MinValue
Dim refreshWasEnabled As Boolean = False Dim refreshWasEnabled As Boolean = False
@@ -1436,10 +1445,10 @@ Public Class frmMain
LOGGER.Info("[PERF Decide_Load] ruft LoadOverviewData auf...") LOGGER.Info("[PERF Decide_Load] ruft LoadOverviewData auf...")
End If End If
' UI vorbereiten '' UI vorbereiten
If Not PrepareGridForLoading() Then 'If Not PrepareGridForLoading() Then
Exit Function ' Exit Function
End If 'End If
Await Task.Yield() Await Task.Yield()
@@ -1451,10 +1460,10 @@ Public Class frmMain
LOGGER.Info("[PERF Decide_Load] ruft LoadProfileData auf...") LOGGER.Info("[PERF Decide_Load] ruft LoadProfileData auf...")
End If End If
' UI vorbereiten '' UI vorbereiten
If Not PrepareGridForLoading() Then 'If Not PrepareGridForLoading() Then
Exit Function ' Exit Function
End If 'End If
Await Task.Yield() Await Task.Yield()
@@ -1477,7 +1486,10 @@ Public Class frmMain
LOGGER.Info("Unexpected error in Decide_load: " & ex.Message) LOGGER.Info("Unexpected error in Decide_load: " & ex.Message)
Finally Finally
FRONTEND_ACTION = FA_NONE FRONTEND_ACTION = FA_NONE
If overlayStartedHere Then
_overlayActive = False
SplashScreenManager.CloseOverlayForm(oHandle)
End If
If refreshWasEnabled Then If refreshWasEnabled Then
TimerRefresh.Start() TimerRefresh.Start()
End If End If
@@ -1491,33 +1503,6 @@ Public Class frmMain
End If End If
End Try End Try
End Function End Function
' ========================================
' UI-VORBEREITUNG - Macht Grid sichtbar und zeigt LoadingPanel
' ========================================
Private Function PrepareGridForLoading() As Boolean
Try
' Grid sichtbar machen
If GridControlWorkflows.Visible = False Then
GridControlWorkflows.Visible = True
End If
' UI-Thread Zeit geben
Application.DoEvents()
' LoadingPanel anzeigen
GridViewWorkflows.ShowLoadingPanel()
' Nochmal Zeit zum Rendern
Application.DoEvents()
Return True
Catch ex As Exception
LOGGER.Error(ex)
Return False
End Try
End Function
' ======================================== ' ========================================
' OVERVIEW DATEN LADEN - Spezialisiert auf Overview ' OVERVIEW DATEN LADEN - Spezialisiert auf Overview
' ======================================== ' ========================================
@@ -1686,9 +1671,6 @@ Public Class frmMain
GridControlWorkflows.EndUpdate() GridControlWorkflows.EndUpdate()
End If End If
' LoadingPanel verstecken (NUR HIER!)
GridViewWorkflows.HideLoadingPanel()
If LOG_HOTSPOTS Then If LOG_HOTSPOTS Then
Dim totalElapsed = (DateTime.Now - perfStart).TotalMilliseconds Dim totalElapsed = (DateTime.Now - perfStart).TotalMilliseconds
If totalElapsed > 4000 Then If totalElapsed > 4000 Then
@@ -1759,9 +1741,6 @@ Public Class frmMain
If gridUpdateStarted Then If gridUpdateStarted Then
GridControlWorkflows.EndUpdate() GridControlWorkflows.EndUpdate()
End If End If
' LoadingPanel verstecken (NUR HIER!)
GridViewWorkflows.HideLoadingPanel()
End Try End Try
End Function End Function
@@ -2548,11 +2527,9 @@ Public Class frmMain
Dim viewUpdateStarted As Boolean = False Dim viewUpdateStarted As Boolean = False
Dim layoutRestored As Boolean = False Dim layoutRestored As Boolean = False
Dim resetLayoutTriggered As Boolean = False Dim resetLayoutTriggered As Boolean = False
Dim showLoadingPanel As Boolean = False
Dim useWaitCursorApplied As Boolean = False Dim useWaitCursorApplied As Boolean = False
Dim previousMessage As String = bsiMessage.Caption Dim previousMessage As String = bsiMessage.Caption
Dim loadingMessageApplied As Boolean = False Dim loadingMessageApplied As Boolean = False
Dim gridWasMadeVisible As Boolean = False
If LOG_HOTSPOTS Then If LOG_HOTSPOTS Then
perfStart = DateTime.Now perfStart = DateTime.Now
@@ -2564,24 +2541,11 @@ Public Class frmMain
' SCHRITT 1: Grid sichtbar machen ' SCHRITT 1: Grid sichtbar machen
If GridControlWorkflows.Visible = False Then If GridControlWorkflows.Visible = False Then
GridControlWorkflows.Visible = True GridControlWorkflows.Visible = True
gridWasMadeVisible = True
End If End If
GRID_LOAD_TYPE = "OVERVIEW" GRID_LOAD_TYPE = "OVERVIEW"
CURRENT_CLICKED_PROFILE_ID = 0 CURRENT_CLICKED_PROFILE_ID = 0
' SCHRITT 2: UI-Thread Zeit geben, das Grid zu rendern
Application.DoEvents()
Await Task.Delay(100)
' SCHRITT 3: LoadingPanel anzeigen (jetzt ist das Grid definitiv sichtbar!)
GridViewWorkflows.ShowLoadingPanel()
showLoadingPanel = True
' SCHRITT 4: UI-Thread Zeit zum Rendern des LoadingPanels geben
Application.DoEvents()
Await Task.Delay(150)
If LOG_HOTSPOTS Then If LOG_HOTSPOTS Then
Dim elapsed = (DateTime.Now - perfStep).TotalMilliseconds Dim elapsed = (DateTime.Now - perfStep).TotalMilliseconds
If elapsed > 4000 Then If elapsed > 4000 Then
@@ -2876,7 +2840,6 @@ Public Class frmMain
Finally Finally
' ========== AUFRÄUMEN ========== ' ========== AUFRÄUMEN ==========
' EndUpdate IMMER aufrufen (vor dem Verstecken des LoadingPanel)
If viewUpdateStarted Then If viewUpdateStarted Then
GridViewWorkflows.EndUpdate() GridViewWorkflows.EndUpdate()
End If End If
@@ -2884,11 +2847,6 @@ Public Class frmMain
GridControlWorkflows.EndUpdate() GridControlWorkflows.EndUpdate()
End If End If
' LoadingPanel SOFORT nach EndUpdate verstecken
If showLoadingPanel Then
GridViewWorkflows.HideLoadingPanel()
End If
' WaitCursor entfernen ' WaitCursor entfernen
If useWaitCursorApplied Then If useWaitCursorApplied Then
Me.UseWaitCursor = False Me.UseWaitCursor = False

File diff suppressed because it is too large Load Diff

View File

@@ -624,6 +624,12 @@
<Compile Include="frmError.vb"> <Compile Include="frmError.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="frmExpression_Designer.Designer.vb">
<DependentUpon>frmExpression_Designer.vb</DependentUpon>
</Compile>
<Compile Include="frmExpression_Designer.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmFileInfo.Designer.vb"> <Compile Include="frmFileInfo.Designer.vb">
<DependentUpon>frmFileInfo.vb</DependentUpon> <DependentUpon>frmFileInfo.vb</DependentUpon>
</Compile> </Compile>
@@ -868,6 +874,9 @@
<DependentUpon>frmError.vb</DependentUpon> <DependentUpon>frmError.vb</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="frmExpression_Designer.resx">
<DependentUpon>frmExpression_Designer.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmFileInfo.resx"> <EmbeddedResource Include="frmFileInfo.resx">
<DependentUpon>frmFileInfo.vb</DependentUpon> <DependentUpon>frmFileInfo.vb</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>