b939ffd810
- Migliorata gestione MTable per Doors.
585 lines
20 KiB
VB.net
585 lines
20 KiB
VB.net
Imports System.Collections.ObjectModel
|
|
Imports System.IO
|
|
Imports EgtUILib
|
|
Imports System.Text.RegularExpressions
|
|
Imports Microsoft.Win32
|
|
|
|
Namespace EgtCAM5
|
|
|
|
Public Class MTableDbViewModel
|
|
Inherits TabViewModel
|
|
|
|
Private m_TablesList As New ObservableCollection(Of MTableListBoxItem)
|
|
Public Property TablesList As ObservableCollection(Of MTableListBoxItem)
|
|
Get
|
|
Return m_TablesList
|
|
End Get
|
|
Set(value As ObservableCollection(Of MTableListBoxItem))
|
|
m_TablesList = value
|
|
End Set
|
|
End Property
|
|
|
|
#Region "Fields & Properties for graphical elements"
|
|
|
|
Private m_Title As String
|
|
Public ReadOnly Property Title As String
|
|
Get
|
|
Return EgtMsg(MSG_MAINWINDOW + 20)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property MachListHeader As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 8)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property MachineNameTxBl As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 9)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property NcGenerateTxBl As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 10)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property MakeRawTxBl As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 11)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property OnHdr As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 12)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property GeomNameHdr As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 13)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property OperationHdr As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 14)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property MIdHdr As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 15)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property ShiftHdr As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 16)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property MachTypeHdr As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 17)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property MachHdr As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 18)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property MachUpHdr As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 19)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property MachDownHdr As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 20)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property AddMachBtn As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 21)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property RemoveMachBtn As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 22)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property AddMachiningBtn As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 23)
|
|
End Get
|
|
End Property
|
|
|
|
Public ReadOnly Property RemoveMachiningBtn As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 24)
|
|
End Get
|
|
End Property
|
|
|
|
#End Region
|
|
|
|
|
|
#Region "ToolTip"
|
|
|
|
'Proprietà ToolTip
|
|
Public ReadOnly Property NewTableToolTip As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 1)
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property SaveTableToolTip As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 2)
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property SaveAsTableToolTip As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 3)
|
|
End Get
|
|
End Property
|
|
Public ReadOnly Property RemoveTableToolTip As String
|
|
Get
|
|
Return EgtMsg(MSG_DOORS + 4)
|
|
End Get
|
|
End Property
|
|
|
|
#End Region ' ToolTip
|
|
|
|
' Definizione comandi
|
|
Private m_cmdNewTable As ICommand
|
|
Private m_cmdSaveTable As ICommand
|
|
Private m_cmdSaveTableAs As ICommand
|
|
Private m_cmdRemoveTable As ICommand
|
|
Private m_cmdAddMach As ICommand
|
|
Private m_cmdRemoveMach As ICommand
|
|
Private m_cmdAddRow As ICommand
|
|
Private m_cmdRemoveRow As ICommand
|
|
Private m_cmdMoveRowUp As ICommand
|
|
Private m_cmdMoveRowDown As ICommand
|
|
Private m_cmdCloseMTableWindow As ICommand
|
|
|
|
#Region "CONSTRUCTOR"
|
|
|
|
Sub New()
|
|
UpdateTables()
|
|
If m_TablesList.Count > 0 Then
|
|
m_TablesList(0).IsSelected = True
|
|
End If
|
|
Application.Msn.Register(Application.SAVEDOORTABLE, Sub(MTable As MTableListBoxItem)
|
|
SaveTable(MTable)
|
|
End Sub)
|
|
Application.Msn.Register(Application.REMOVEDOORTABLE, Sub(MTable As MTableListBoxItem)
|
|
TablesList.Remove(MTable)
|
|
End Sub)
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region "METHODS"
|
|
|
|
Private Sub UpdateTables()
|
|
m_TablesList.Clear()
|
|
' se trovo la cartella carico la lista di tabelle
|
|
Dim FileTableList As ReadOnlyCollection(Of String) = My.Computer.FileSystem.GetFiles(IniFile.m_sTablesRoot)
|
|
For Index As Integer = 0 To FileTableList.Count - 1
|
|
If Path.GetExtension(FileTableList(Index)).ToLower = ".mtl" Then
|
|
m_TablesList.Add(New MTableListBoxItem(Path.GetFileNameWithoutExtension(FileTableList(Index)), FileTableList(Index)))
|
|
VerifyNewName(Path.GetFileNameWithoutExtension(FileTableList(Index)))
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
Private Sub VerifyNewName(sNewName As String)
|
|
Dim sNameIndex As String = Regex.Match(sNewName, "MTable_(\d+)").Groups(1).Value
|
|
Dim nNameIndex As Integer = 0
|
|
If Not String.IsNullOrEmpty(sNameIndex) Then
|
|
Integer.TryParse(sNameIndex, nNameIndex)
|
|
End If
|
|
If nNameIndex > MTableListBoxItem.NewMTableIndex Then
|
|
MTableListBoxItem.NewMTableIndex = nNameIndex
|
|
End If
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region "COMMANDS"
|
|
|
|
#Region "NewTableCommand"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property NewTableCommand As ICommand
|
|
Get
|
|
If m_cmdNewTable Is Nothing Then
|
|
m_cmdNewTable = New RelayCommand(AddressOf NewTable)
|
|
End If
|
|
Return m_cmdNewTable
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub NewTable(param As Object)
|
|
Dim NewMTable As MTableListBoxItem = New MTableListBoxItem("MTable_" & (MTableListBoxItem.NewMTableIndex + 1).ToString, String.Empty)
|
|
m_TablesList.Add(NewMTable)
|
|
MTableListBoxItem.NewMTableIndex += 1
|
|
If Not IsNothing(param) Then
|
|
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
|
|
SelectedMTable.IsSelected = False
|
|
End If
|
|
NewMTable.IsSelected = True
|
|
End Sub
|
|
|
|
#End Region ' NewTableCommand
|
|
|
|
#Region "SaveTableCommand"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property SaveTableCommand As ICommand
|
|
Get
|
|
If m_cmdSaveTable Is Nothing Then
|
|
m_cmdSaveTable = New RelayCommand(AddressOf SaveTable)
|
|
End If
|
|
Return m_cmdSaveTable
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub SaveTable(param As Object)
|
|
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
|
|
If IsNothing(SelectedMTable) Then Return
|
|
Dim sFile As String = String.Empty
|
|
If String.IsNullOrEmpty(SelectedMTable.TableNamePath) Then
|
|
If Not SaveTableAsDialog(sFile, SelectedMTable.TableName) Then Return
|
|
SelectedMTable.m_TableNamePath = sFile
|
|
SelectedMTable.TableName = Path.GetFileNameWithoutExtension(sFile)
|
|
VerifyNewName(SelectedMTable.TableName)
|
|
End If
|
|
TableUtility.WriteDoorTable(SelectedMTable, SelectedMTable.TableNamePath)
|
|
SelectedMTable.IsModifiedReset()
|
|
End Sub
|
|
|
|
#End Region ' SaveTableCommand
|
|
|
|
#Region "SaveTableAsCommand"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property SaveTableAsCommand As ICommand
|
|
Get
|
|
If m_cmdSaveTableAs Is Nothing Then
|
|
m_cmdSaveTableAs = New RelayCommand(AddressOf SaveTableAs)
|
|
End If
|
|
Return m_cmdSaveTableAs
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub SaveTableAs(param As Object)
|
|
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
|
|
If IsNothing(SelectedMTable) Then Return
|
|
Dim sFile As String = String.Empty
|
|
If SaveTableAsDialog(sFile, SelectedMTable.TableName) Then
|
|
SelectedMTable.IsModifiedReset()
|
|
VerifyNewName(SelectedMTable.TableName)
|
|
TableUtility.WriteDoorTable(SelectedMTable, sFile)
|
|
UpdateTables()
|
|
' seleziono la tabella appena salvata
|
|
For Index As Integer = 0 To m_TablesList.Count - 1
|
|
If m_TablesList(Index).TableNamePath = sFile Then
|
|
m_TablesList(Index).IsSelected = True
|
|
End If
|
|
Next
|
|
End If
|
|
End Sub
|
|
|
|
Public Function SaveTableAsDialog(ByRef sPath As String, sTableName As String) As Boolean
|
|
' Direttorio corrente per MTable
|
|
Dim sDir As String = IniFile.m_sTablesRoot
|
|
' Apertura dialogo di scelta file DDF
|
|
Dim SaveFileDialog As New SaveFileDialog
|
|
SaveFileDialog.Title = EgtMsg(MSG_DOORS + 5)
|
|
SaveFileDialog.Filter = "MTable script(*.mtl)|*.mtl"
|
|
SaveFileDialog.FilterIndex = 1
|
|
SaveFileDialog.InitialDirectory = sDir
|
|
SaveFileDialog.FileName = sTableName
|
|
If SaveFileDialog.ShowDialog <> True Then
|
|
Return False
|
|
End If
|
|
sPath = SaveFileDialog.FileName
|
|
Return True
|
|
End Function
|
|
|
|
#End Region ' SaveTableAsCommand
|
|
|
|
#Region "RemoveTableCommand"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property RemoveTableCommand As ICommand
|
|
Get
|
|
If m_cmdRemoveTable Is Nothing Then
|
|
m_cmdRemoveTable = New RelayCommand(AddressOf RemoveTable)
|
|
End If
|
|
Return m_cmdRemoveTable
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub RemoveTable(param As Object)
|
|
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
|
|
If IsNothing(SelectedMTable) Then Return
|
|
If MessageBox.Show(EgtMsg(MSG_DOORS + 6), "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then
|
|
If Not String.IsNullOrEmpty(SelectedMTable.TableNamePath) Then
|
|
File.Delete(SelectedMTable.TableNamePath)
|
|
End If
|
|
Dim SelectedTableIndex As Integer = m_TablesList.IndexOf(SelectedMTable)
|
|
m_TablesList.RemoveAt(SelectedTableIndex)
|
|
If SelectedTableIndex > 0 Then
|
|
TablesList(SelectedTableIndex - 1).IsSelected = True
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' RemoveTableCommand
|
|
|
|
#Region "AddMachCommand"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property AddMachCommand As ICommand
|
|
Get
|
|
If m_cmdAddMach Is Nothing Then
|
|
m_cmdAddMach = New RelayCommand(AddressOf AddMach)
|
|
End If
|
|
Return m_cmdAddMach
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub AddMach(param As Object)
|
|
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
|
|
If IsNothing(SelectedMTable) Then Return
|
|
SelectedMTable.SharedMachIndex += 1
|
|
SelectedMTable.ActiveMachinesList.Add(New MTableMachineListBoxItem(String.Empty, False, False, SelectedMTable.SharedMachIndex))
|
|
SelectedMTable.MachIdList.Add(SelectedMTable.SharedMachIndex)
|
|
End Sub
|
|
|
|
#End Region ' AddMachCommand
|
|
|
|
#Region "RemoveMachCommand"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property RemoveMachCommand As ICommand
|
|
Get
|
|
If m_cmdRemoveMach Is Nothing Then
|
|
m_cmdRemoveMach = New RelayCommand(AddressOf RemoveMach)
|
|
End If
|
|
Return m_cmdRemoveMach
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub RemoveMach(param As Object)
|
|
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
|
|
If Not IsNothing(SelectedMTable) AndAlso SelectedMTable.ActiveMachinesList.Count > 1 Then
|
|
SelectedMTable.ActiveMachinesList.RemoveAt(SelectedMTable.SharedMachIndex - 1)
|
|
SelectedMTable.MachIdList.RemoveAt(SelectedMTable.SharedMachIndex - 1)
|
|
SelectedMTable.SharedMachIndex -= 1
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' RemoveMachCommand
|
|
|
|
#Region "AddRowCommand"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property AddRowCommand As ICommand
|
|
Get
|
|
If m_cmdAddRow Is Nothing Then
|
|
m_cmdAddRow = New RelayCommand(AddressOf AddRow)
|
|
End If
|
|
Return m_cmdAddRow
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub AddRow(param As Object)
|
|
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
|
|
If Not IsNothing(SelectedMTable) AndAlso Not IsNothing(SelectedMTable.SelectedAssociation) Then
|
|
Dim SelectedIndex As Integer = SelectedMTable.AssociationList.IndexOf(SelectedMTable.SelectedAssociation)
|
|
Dim NewEmptyRow As MTableAssociationGridBoxItem = New MTableAssociationGridBoxItem(False, String.Empty, 1, 0, String.Empty, String.Empty, String.Empty, String.Empty)
|
|
SelectedMTable.AssociationList.Insert(SelectedIndex, NewEmptyRow)
|
|
SelectedMTable.SelectedAssociation = NewEmptyRow
|
|
SelectedMTable.NotifyPropertyChanged("SelectedAssociation")
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' AddRowCommand
|
|
|
|
#Region "RemoveRowCommand"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property RemoveRowCommand As ICommand
|
|
Get
|
|
If m_cmdRemoveRow Is Nothing Then
|
|
m_cmdRemoveRow = New RelayCommand(AddressOf RemoveRow)
|
|
End If
|
|
Return m_cmdRemoveRow
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub RemoveRow(param As Object)
|
|
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
|
|
If Not IsNothing(SelectedMTable) AndAlso SelectedMTable.AssociationList.Count > 1 Then
|
|
Dim SelectedIndex As Integer = SelectedMTable.AssociationList.IndexOf(SelectedMTable.SelectedAssociation)
|
|
SelectedMTable.AssociationList.RemoveAt(SelectedIndex)
|
|
If Not SelectedIndex < SelectedMTable.AssociationList.Count Then
|
|
SelectedIndex = SelectedMTable.AssociationList.Count - 1
|
|
End If
|
|
SelectedMTable.SelectedAssociation = SelectedMTable.AssociationList(SelectedIndex)
|
|
SelectedMTable.NotifyPropertyChanged("SelectedAssociation")
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' RemoveRowCommand
|
|
|
|
#Region "MoveRowUpCommand"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property MoveRowUpCommand As ICommand
|
|
Get
|
|
If m_cmdMoveRowUp Is Nothing Then
|
|
m_cmdMoveRowUp = New RelayCommand(AddressOf MoveRowUp)
|
|
End If
|
|
Return m_cmdMoveRowUp
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub MoveRowUp(param As Object)
|
|
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
|
|
If IsNothing(SelectedMTable) Then Return
|
|
Dim SelectedIndex As Integer = SelectedMTable.AssociationList.IndexOf(SelectedMTable.SelectedAssociation)
|
|
If SelectedIndex >= 1 Then
|
|
SelectedMTable.AssociationList.Move(SelectedIndex, SelectedIndex - 1)
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' MoveRowUpCommand
|
|
|
|
#Region "MoveRowDownCommand"
|
|
|
|
''' <summary>
|
|
''' Returns a command that do Exec.
|
|
''' </summary>
|
|
Public ReadOnly Property MoveRowDownCommand As ICommand
|
|
Get
|
|
If m_cmdMoveRowDown Is Nothing Then
|
|
m_cmdMoveRowDown = New RelayCommand(AddressOf MoveRowDown)
|
|
End If
|
|
Return m_cmdMoveRowDown
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Execute the Exec. This method is invoked by the ExecCommand.
|
|
''' </summary>
|
|
Public Sub MoveRowDown(param As Object)
|
|
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
|
|
If IsNothing(SelectedMTable) Then Return
|
|
Dim SelectedIndex As Integer = SelectedMTable.AssociationList.IndexOf(SelectedMTable.SelectedAssociation)
|
|
If SelectedIndex < SelectedMTable.AssociationList.Count - 1 Then
|
|
SelectedMTable.AssociationList.Move(SelectedIndex, SelectedIndex + 1)
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' MoveRowDownCommand
|
|
|
|
#Region "CloseMTableWindowCommand"
|
|
|
|
''' <summary>
|
|
''' Returns a command that remove the current selected machining.
|
|
''' </summary>
|
|
Public ReadOnly Property CloseMTableWindowCommand() As ICommand
|
|
Get
|
|
If m_cmdCloseMTableWindow Is Nothing Then
|
|
m_cmdCloseMTableWindow = New RelayCommand(AddressOf CloseMTableWindow)
|
|
End If
|
|
Return m_cmdCloseMTableWindow
|
|
End Get
|
|
End Property
|
|
|
|
''' <summary>
|
|
''' Manage the MachiningDb closing. This method is invoked by the CloseMachiningDbCommand.
|
|
''' </summary>
|
|
Public Sub CloseMTableWindow(param As Object)
|
|
Dim SelectedMTable As MTableListBoxItem = DirectCast(param, MTableListBoxItem)
|
|
If Not IsNothing(SelectedMTable) AndAlso (SelectedMTable.IsModified() OrElse String.IsNullOrEmpty(SelectedMTable.m_TableNamePath)) Then
|
|
' chiedo se salvare la tabella corrente prima di passare alla successiva
|
|
If MessageBox.Show(EgtMsg(MSG_DOORS + 7), "", MessageBoxButton.YesNo, MessageBoxImage.Question) = MessageBoxResult.Yes Then
|
|
SaveTable(SelectedMTable)
|
|
End If
|
|
End If
|
|
' Chiusura finestra
|
|
For Each Window In Application.Current.Windows
|
|
If TypeOf Window Is MTableDbView Then
|
|
Dim MTableDbView As MTableDbView = DirectCast(Window, MTableDbView)
|
|
MTableDbView.Close()
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
#End Region ' CloseMTableWindowCommand
|
|
|
|
#End Region
|
|
|
|
End Class
|
|
|
|
End Namespace |