437 lines
20 KiB
VB.net
437 lines
20 KiB
VB.net
Imports EgtBEAMWALL.Core
|
|
Imports EgtBEAMWALL.Core.ConstBeam
|
|
Imports EgtBEAMWALL.Core.ConstGen
|
|
Imports EgtBEAMWALL.Core.ConstIni
|
|
Imports EgtUILib
|
|
Imports EgtWPFLib5
|
|
Imports System.IO
|
|
Imports System.Threading
|
|
Imports System.Windows.Threading
|
|
|
|
Public Class MainWindowVM
|
|
Inherits VMBase
|
|
|
|
Private m_SupervisorCommThread As Thread
|
|
Private m_Supervisor_Timer As New DispatcherTimer
|
|
|
|
' Riferimento al Model della MainWindow
|
|
Private m_MainWindowM As MainWindowM
|
|
Friend ReadOnly Property MainWindowM As MainWindowM
|
|
Get
|
|
Return m_MainWindowM
|
|
End Get
|
|
End Property
|
|
|
|
' Variabile che indica che il programma è stato avviato correttamente (sia la mappa che l'ambiente Egt)
|
|
Private m_bInitStatus As Boolean
|
|
Friend ReadOnly Property bInitStatus As Boolean
|
|
Get
|
|
Return m_bInitStatus
|
|
End Get
|
|
End Property
|
|
|
|
' Titolo
|
|
Private m_Title As String = ""
|
|
Public ReadOnly Property Title As String
|
|
Get
|
|
Return m_Title
|
|
End Get
|
|
End Property
|
|
|
|
' proprietà che seleziona la giusta pagina del TabControl
|
|
Public Property nSelTabPage As Integer
|
|
Get
|
|
Return If(IsNothing(Map.refMainMenuVM.SelPage) OrElse Map.refMainMenuVM.SelPage = -1 OrElse Map.refMainMenuVM.SelPage = Pages.VIEW OrElse Map.refMainMenuVM.SelPage = Pages.MACHINING OrElse Map.refMainMenuVM.SelPage = Pages.ONLYPRODPAGE, 0, 1)
|
|
End Get
|
|
Set(value As Integer)
|
|
End Set
|
|
End Property
|
|
|
|
Private m_MachinePanelVM As MachinePanelVM
|
|
Public ReadOnly Property MachinePanelVM As MachinePanelVM
|
|
Get
|
|
Return m_MachinePanelVM
|
|
End Get
|
|
End Property
|
|
|
|
Private m_ProjectContent As Object
|
|
Public ReadOnly Property ProjectContent As Object
|
|
Get
|
|
Return If(Map.refMainWindowVM.MainWindowM.bOnlyProd, New OnlyProdProjectV(), New ProjectV())
|
|
End Get
|
|
End Property
|
|
|
|
'Friend m_SupervisorStop As Boolean = False
|
|
Private BlockedWnd As BlockedWndV
|
|
|
|
' definizione comandi
|
|
Private m_cmdAboutBox As ICommand
|
|
Private m_cmdCloseApplication As ICommand
|
|
|
|
#Region "CONSTRUCTOR"
|
|
|
|
Sub New()
|
|
' Avvio l'inizializzazione della mappa passandogli il riferimento al MainWindowVM
|
|
Map.BeginInit(Me)
|
|
' Creo Model della MainWindow
|
|
m_MainWindowM = New MainWindowM
|
|
' inizializzo machine panel
|
|
m_MachinePanelVM = New MachinePanelVM
|
|
' inizializzo contatore per blocco da supervisore
|
|
m_Supervisor_Timer.Interval = TimeSpan.FromMilliseconds(500)
|
|
AddHandler m_Supervisor_Timer.Tick, AddressOf SupervisorTimer_Tick
|
|
m_Supervisor_Timer.Start()
|
|
|
|
'm_ProjectContent = If(Map.refMainWindowVM.MainWindowM.bOnlyProd, New OnlyProdProjectV(), New ProjectV())
|
|
'NotifyPropertyChanged(NameOf(ProjectContent))
|
|
End Sub
|
|
|
|
#End Region ' CONSTRUCTOR
|
|
|
|
#Region "METHODS"
|
|
|
|
Friend Sub SetTitle(sTitle As String)
|
|
m_Title = sTitle
|
|
NotifyPropertyChanged(NameOf(Title))
|
|
End Sub
|
|
Public Sub UpdateTitle()
|
|
m_Title = ""
|
|
Select Case Map.refMainMenuVM.SelPage
|
|
Case Pages.VIEW
|
|
If GetMainPrivateProfileInt(S_GENERAL, K_PROJECTMODE, 0) = 1 Then
|
|
If Not IsNothing(ProjectManagerVM.CurrProj) Then
|
|
If ProjectManagerVM.CurrProj.bIsNew Then m_Title = "New - "
|
|
If Not IsNothing(ProjectManagerVM.CurrProj.nProdId) AndAlso ProjectManagerVM.CurrProj.nProdId > 0 Then
|
|
m_Title &= ProjectManagerVM.CurrProj.nProdId.ToString("0000") & " - "
|
|
End If
|
|
m_Title &= ProjectManagerVM.CurrProj.sBTLFileName
|
|
End If
|
|
Else
|
|
If Not IsNothing(ProjectManagerVM.CurrProj) Then
|
|
If ProjectManagerVM.CurrProj.bIsNew Then m_Title = "New - "
|
|
m_Title &= ProjectManagerVM.CurrProj.nProjId.ToString("0000") & " - " & ProjectManagerVM.CurrProj.sBTLFileName
|
|
End If
|
|
End If
|
|
Case Pages.MACHINING
|
|
If GetMainPrivateProfileInt(S_GENERAL, K_PROJECTMODE, 0) = 1 Then
|
|
If Not IsNothing(ProjectManagerVM.CurrProd) Then
|
|
If ProjectManagerVM.CurrProd.bIsNew Then m_Title = "New - "
|
|
m_Title &= ProjectManagerVM.CurrProd.nProdId.ToString("0000") & " - " & ProjectManagerVM.CurrProd.sName
|
|
End If
|
|
Else
|
|
If Not IsNothing(ProjectManagerVM.CurrProd) Then
|
|
If ProjectManagerVM.CurrProd.bIsNew Then m_Title = "New - "
|
|
m_Title &= ProjectManagerVM.CurrProd.nProdId.ToString("0000") & " - " & ProjectManagerVM.CurrProd.sBTLFileName
|
|
End If
|
|
End If
|
|
Case Pages.CONFIG
|
|
m_Title = "Configuration Page"
|
|
Case Pages.ONLYPRODPAGE
|
|
If GetMainPrivateProfileInt(S_GENERAL, K_PROJECTMODE, 0) = 1 Then
|
|
If Not IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then
|
|
If Map.refOnlyProdManagerVM.CurrProd.bIsNew Then m_Title = "New - "
|
|
m_Title &= Map.refOnlyProdManagerVM.CurrProd.nProdId.ToString("0000") & " - " & Map.refOnlyProdManagerVM.CurrProd.sName
|
|
End If
|
|
Else
|
|
If Not IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then
|
|
If Map.refOnlyProdManagerVM.CurrProd.bIsNew Then m_Title = "New - "
|
|
m_Title &= Map.refOnlyProdManagerVM.CurrProd.nProdId.ToString("0000") & " - " & Map.refOnlyProdManagerVM.CurrProd.sBTLFileName
|
|
End If
|
|
End If
|
|
End Select
|
|
m_Title &= " - EgtBEAMWALL"
|
|
NotifyPropertyChanged(NameOf(Title))
|
|
End Sub
|
|
|
|
Friend Sub ContentRendered()
|
|
DbControllers.Init()
|
|
'' chiamata a caso su Db per inizializzarlo
|
|
DbControllers.m_ProjController.FindByProjDbId(0)
|
|
' Verifico che l'inizializzazione di tutte le parti del programma sia andata a buon fine
|
|
If Map.EndInit() Then
|
|
m_bInitStatus = True
|
|
' altrimenti chiudo il programma
|
|
Else
|
|
m_bInitStatus = False
|
|
End If
|
|
' Aggiorno visualizzazione unità di misura
|
|
'Map.refStatusBarVM.SetMeasureUnit(If(EgtUiUnitsAreMM(), MeasureUnitOpt.MM, MeasureUnitOpt.INCH))
|
|
' imposto MainWindow per finestra di Loading
|
|
LoadingWndHelper.SetMainWindow(Application.Current.MainWindow)
|
|
' leggo riga di comando
|
|
Dim nCommandType As Integer = 0
|
|
Dim nPage As Pages = Nothing
|
|
Dim nProdId As Integer = 0
|
|
If Map.refMainWindowVM.MainWindowM.bOnlyProd Then
|
|
nPage = Pages.ONLYPRODPAGE
|
|
Else
|
|
nPage = Pages.VIEW
|
|
End If
|
|
If ProcessCommandLine(nCommandType, nPage, nProdId) Then
|
|
Select Case nCommandType
|
|
Case 1
|
|
If Map.refMainWindowVM.MainWindowM.bOnlyProd Then
|
|
Map.refOnlyProdManagerVM.SetCurrProd(nProdId)
|
|
Map.refOnlyProdManagerVM.SetCurrProj(Map.refOnlyProdManagerVM.CurrProd.nProjId)
|
|
Else
|
|
Map.refProdManagerVM.SetCurrProd(nProdId)
|
|
End If
|
|
Case 2
|
|
' pagina gia' impostata nella variabile
|
|
End Select
|
|
Else
|
|
' setto il primo file dalla lista degli MRU come progetto corrente da aprire
|
|
Dim sLastProjectPath As String = String.Empty
|
|
Dim sMruSection As String = S_MRUPROJFILES
|
|
If Map.refMainWindowVM.MainWindowM.bOnlyProd Then
|
|
sMruSection = S_MRUPRODFILES
|
|
End If
|
|
GetMainPrivateProfileString(sMruSection, K_FILE & "1", String.Empty, sLastProjectPath)
|
|
If Not String.IsNullOrWhiteSpace(sLastProjectPath) AndAlso File.Exists(sLastProjectPath) Then
|
|
' ricavo l'Id e il progetto associato per l'apertura di quest'ultimo
|
|
Dim PjId As Integer = 0
|
|
Dim sPjId As String = Path.GetFileNameWithoutExtension(sLastProjectPath)
|
|
Integer.TryParse(sPjId, PjId)
|
|
If Map.refMainWindowVM.MainWindowM.bOnlyProd Then
|
|
Map.refOnlyProdManagerVM.SetCurrProd(PjId)
|
|
Map.refOnlyProdManagerVM.SetCurrProj(Map.refOnlyProdManagerVM.CurrProd.nProjIdList(0))
|
|
Else
|
|
Map.refProjManagerVM.SetCurrProj(PjId)
|
|
End If
|
|
End If
|
|
End If
|
|
' seleziono pagina da aprire
|
|
Map.refMainMenuVM.SelPage = nPage
|
|
|
|
' inizializzo thread di aggiornamento e comunicazione con DB
|
|
' creo thread gestione macchina
|
|
m_SupervisorCommThread = New Thread(Sub()
|
|
SupervisorCommThread.SupervisorCommThreadFunction()
|
|
End Sub)
|
|
m_SupervisorCommThread.SetApartmentState(ApartmentState.STA)
|
|
' avvio thread di gestione della macchina che avvia la connessione
|
|
m_SupervisorCommThread.Start()
|
|
|
|
' verifico se richiedere di fare backup
|
|
If Map.refConfigurationPageVM.SelReminder.Id <> 0 Then
|
|
Dim sBackupFolder As String = Map.refMainWindowVM.MainWindowM.sDataDir & "\Backup"
|
|
Dim nYear As Integer = 0
|
|
Dim nMonth As Integer = 0
|
|
Dim nDay As Integer = 0
|
|
Dim LastBackupDate As Date = Date.MinValue
|
|
' verifico se esiste backup
|
|
If Directory.Exists(sBackupFolder) Then
|
|
' cerco ultimo backup
|
|
Dim YearDirList() As String = Directory.GetDirectories(sBackupFolder)
|
|
For YearIndex = YearDirList.Length - 1 To 0 Step -1
|
|
nYear = 0
|
|
Integer.TryParse(Path.GetFileName(YearDirList(YearIndex)), nYear)
|
|
Dim sYearDir As String = sBackupFolder & "\" & nYear
|
|
Dim MonthDirList() As String = Directory.GetDirectories(sYearDir)
|
|
For MonthIndex = MonthDirList.Length - 1 To 0 Step -1
|
|
nMonth = 0
|
|
Integer.TryParse(Path.GetFileName(MonthDirList(MonthIndex)), nMonth)
|
|
Dim sMonthDir As String = sYearDir & "\" & nMonth
|
|
Dim DayDirList() As String = Directory.GetDirectories(sMonthDir)
|
|
For DayIndex = DayDirList.Length - 1 To 0 Step -1
|
|
nDay = 0
|
|
Integer.TryParse(Path.GetFileName(DayDirList(DayIndex)), nDay)
|
|
Dim sDayDir As String = sMonthDir & "\" & nDay
|
|
Dim VersionList() As String = Directory.GetFiles(sDayDir)
|
|
If VersionList.Length > 0 Then
|
|
Dim nMaxVersion As Int64 = VersionList.Max(Function(x) Int64.Parse(Path.GetFileNameWithoutExtension(x)))
|
|
LastBackupDate = New Date(nYear, nMonth, nDay)
|
|
Exit For
|
|
End If
|
|
Next
|
|
If LastBackupDate <> Date.MinValue Then Exit For
|
|
Next
|
|
If LastBackupDate <> Date.MinValue Then Exit For
|
|
Next
|
|
End If
|
|
Dim TimeFromLastBackup As TimeSpan = DateTime.Now - LastBackupDate
|
|
If TimeFromLastBackup > TimeSpan.FromDays(Map.refConfigurationPageVM.SelReminder.Id) Then
|
|
If MessageBox.Show(String.Format(EgtMsg(61987), Map.refConfigurationPageVM.SelReminder.Name), EgtMsg(15002), MessageBoxButton.YesNo, MessageBoxImage.Warning) = MessageBoxResult.Yes Then
|
|
Map.refConfigurationPageVM.Backup(True)
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
End Sub
|
|
|
|
Friend Function ProcessCommandLine(ByRef nCommandType As Integer, ByRef nPage As Pages, ByRef nProdId As Integer) As Boolean
|
|
' Se non ci sono veri parametri su linea di comando, esco (il primo è sempre il nome del programma)
|
|
If Environment.GetCommandLineArgs.Count() <= 1 Then Return False
|
|
' Recupero primo parametro che dovrebbe essere il tipo di modalita' riga di comando
|
|
Dim sFile As String = Environment.GetCommandLineArgs(1)
|
|
If String.IsNullOrWhiteSpace(sFile) OrElse Not Integer.TryParse(sFile, nCommandType) OrElse nCommandType <= 0 Then Return False
|
|
Select Case nCommandType
|
|
Case 1 ' apri progetto in ottimizzatore
|
|
' recupero secondo parametro
|
|
Dim sProdId As String = Environment.GetCommandLineArgs(2)
|
|
If Not Integer.TryParse(sProdId, nProdId) OrElse nProdId <= 0 Then Return False
|
|
nPage = Pages.MACHINING
|
|
Return True
|
|
Case 2 ' apri pagina specifica senza progetto specifico
|
|
' recupero secondo parametro
|
|
Dim sPage As String = Environment.GetCommandLineArgs(2)
|
|
If Not Integer.TryParse(sPage, nPage) OrElse (nPage <> Pages.VIEW AndAlso nPage <> Pages.MACHINING AndAlso Pages.ONLYPRODPAGE) Then Return False
|
|
Return True
|
|
End Select
|
|
Return False
|
|
End Function
|
|
|
|
Friend Sub KeyDown(PressedKey As Key)
|
|
' Con ESC esco dall'azione corrente
|
|
Select Case PressedKey
|
|
Case Key.Escape
|
|
' se in modifica L250
|
|
If Map.refFreeContourManagerVM.bIsActive Then
|
|
' se in modifica testo angolo di inclinazione
|
|
If Map.refFreeContourManagerVM.bIsModifyingTextAngle Then
|
|
Map.refFreeContourManagerVM.CloseIsModifyingTextAngle(False)
|
|
ElseIf Map.refFreeContourManagerVM.bIsCreatingPath Then
|
|
Map.refFreeContourManagerVM.CreatingPathEnd()
|
|
ElseIf Map.refFreeContourManagerVM.bIsOpeningCurveCompo Then
|
|
Map.refFreeContourManagerVM.CloseIsOpeningCurveCompo()
|
|
End If
|
|
' reset Azione corrente
|
|
Map.refSceneHostVM.MainController.ResetStatus()
|
|
Map.refFreeContourInputVM.ResetInputBox()
|
|
End If
|
|
' se misura attiva, la disattivo
|
|
If Map.refInstrumentPanelVM.GetDistIsChecked Then
|
|
Map.refInstrumentPanelVM.SetGetDistance_IsChecked(False)
|
|
End If
|
|
' se Reset Macchina è aperto
|
|
If (nSelTabPage = Pages.VIEW Or nSelTabPage = Pages.MACHINING Or nSelTabPage = Pages.ONLYPRODPAGE) AndAlso Map.refCALCPanelVM.ChooseMachine_Visibility = Visibility.Visible Then
|
|
Map.refCALCPanelVM.CloseResetMachine()
|
|
End If
|
|
' pulisco output
|
|
Map.refMyStatusBarVM.ClearOutputMessage()
|
|
End Select
|
|
End Sub
|
|
|
|
Friend m_ManagingSupervisorStop As Boolean = False
|
|
|
|
Private Sub SupervisorTimer_Tick()
|
|
If SupervisorCommThread.bViewerOptimizerBlocked And Not m_ManagingSupervisorStop Then
|
|
m_ManagingSupervisorStop = True
|
|
BlockedWnd = New BlockedWndV(Application.Current.MainWindow, New BlockedWndVM)
|
|
BlockedWnd.ShowDialog()
|
|
ElseIf Not SupervisorCommThread.bViewerOptimizerBlocked And m_ManagingSupervisorStop Then
|
|
m_ManagingSupervisorStop = False
|
|
BlockedWnd.Close()
|
|
End If
|
|
End Sub
|
|
|
|
#End Region ' METHODS
|
|
|
|
#Region "COMMANDS"
|
|
|
|
#Region "AboutBoxCommand"
|
|
|
|
' Returns a command that manage the MainWindow_Unloaded command
|
|
Public ReadOnly Property AboutBoxCommand() As ICommand
|
|
Get
|
|
If m_cmdAboutBox Is Nothing Then
|
|
m_cmdAboutBox = New Command(AddressOf AboutBox)
|
|
End If
|
|
Return m_cmdAboutBox
|
|
End Get
|
|
End Property
|
|
|
|
' Manage the MainWindow_Unloaded event. This method is invoked by the cmdMainWindow_Unloaded.
|
|
Public Sub AboutBox(ByVal param As Object)
|
|
Dim AboutBoxWindow As New AboutBoxV
|
|
AboutBoxWindow.Owner = Application.Current.MainWindow
|
|
AboutBoxWindow.ShowDialog()
|
|
End Sub
|
|
|
|
#End Region ' AboutBoxCommand
|
|
|
|
#Region "CloseApplicationCommand"
|
|
|
|
' Returns a command that manage the MainWindow_Unloaded command
|
|
Public ReadOnly Property CloseApplicationCommand() As ICommand
|
|
Get
|
|
If m_cmdCloseApplication Is Nothing Then
|
|
m_cmdCloseApplication = New Command(AddressOf CloseApplication)
|
|
End If
|
|
Return m_cmdCloseApplication
|
|
End Get
|
|
End Property
|
|
|
|
' Manage the MainWindow_Unloaded event. This method is invoked by the cmdMainWindow_Unloaded.
|
|
Public Sub CloseApplication(ByVal param As Object)
|
|
If (Keyboard.Modifiers And ModifierKeys.Alt) = ModifierKeys.Alt OrElse Keyboard.IsKeyDown(Key.F4) Then
|
|
Return
|
|
End If
|
|
' verifico se sono in modifica percorso libero
|
|
If Map.refFreeContourManagerVM.bIsActive Then
|
|
MessageBox.Show(EgtMsg(61994))
|
|
Return
|
|
End If
|
|
' verifico se sto facendo backup
|
|
If Map.refConfigurationPageVM.bBackupRunning Then
|
|
MessageBox.Show(EgtMsg(62101), EgtMsg(15002), MessageBoxButton.OK, MessageBoxImage.Warning) 'Backup running! Impossible closing the software until finish the backup process!
|
|
Return
|
|
End If
|
|
If Map.refConfigurationPageVM.bRestoreRunning Then
|
|
MessageBox.Show(EgtMsg(62102), EgtMsg(15002), MessageBoxButton.OK, MessageBoxImage.Warning) 'Restore running! Impossible closing the software until finish the restore process!
|
|
Return
|
|
End If
|
|
'If Map.refOptionPanelVM.SelItem = OptionPanelVM.Tabs.SIMUL Then
|
|
' Map.refSimulTabVM.ResetSimulation()
|
|
'End If
|
|
' Imposto contesto principale
|
|
'EgtSetCurrentContext(Map.refSceneHostVM.MainScene.GetCtx())
|
|
' Gestisco eventuale file corrente modificato
|
|
Dim bOk As Boolean = True
|
|
Select Case Map.refMainMenuVM.SelPage
|
|
Case Pages.VIEW
|
|
bOk = ProjFileVM.VerifyProjectModification(ProjectManagerVM.CurrProj, ProjectType.PROJ)
|
|
Case Pages.MACHINING
|
|
bOk = ProdFileVM.VerifyProjectModification(ProjectManagerVM.CurrProd) <> MessageBoxResult.Cancel
|
|
Case Pages.CONFIG
|
|
' Verifica modifica parametri Macchina e chiedo il salvataggio
|
|
Map.refConfigurationPageVM.VerifyConfigPageModification()
|
|
Case Pages.ONLYPRODPAGE
|
|
bOk = ProdFileVM.VerifyProjectModification(Map.refOnlyProdManagerVM.CurrProd) <> MessageBoxResult.Cancel
|
|
End Select
|
|
' se salvataggio annullato, rimango
|
|
If Not bOk Then Return
|
|
Dim bAllowClose As Boolean = Map.refSceneHostVM.MainController.ManageModified()
|
|
' Salvo impostazione macchina corrente
|
|
Map.refMachinePanelVM.SaveCurrentMachine()
|
|
' Se non confermata chiusura, esco
|
|
If Not bAllowClose Then Return
|
|
' termino thread di comunicazione con Db ed altri programmi
|
|
SupervisorCommThread.StopThread()
|
|
' salvo modo di visualizzazione
|
|
WriteMainPrivateProfileString(S_SCENE, K_SHOWMODE, EgtGetShowMode().ToString)
|
|
' salvo visualizzazione assemblato
|
|
WriteMainPrivateProfileString(S_SCENE, K_SHOWBUILDING, If(Map.refShowBeamPanelVM.ShowBuilding_IsChecked, 1, 0))
|
|
' Salvo nome ultimo file (per gestire bene multi istanza)
|
|
Dim sFilePath As String = String.Empty
|
|
If EgtGetCurrFilePath(sFilePath) Then WriteMainPrivateProfileString(S_GENERAL, K_LASTPROJ, sFilePath)
|
|
' tolgo lock da file aperto
|
|
If Map.refMainMenuVM.SelPage = Pages.VIEW And Not IsNothing(Map.refProjManagerVM) AndAlso Not IsNothing(ProjectManagerVM.CurrProj) Then
|
|
DbControllers.m_ProjController.LockByProjId(ProjectManagerVM.CurrProj.nProjId, False, Map.refMainWindowVM.MainWindowM.GetKeyNumber())
|
|
ElseIf Map.refMainMenuVM.SelPage = Pages.MACHINING And Not IsNothing(Map.refProdManagerVM) AndAlso Not IsNothing(ProjectManagerVM.CurrProd) Then
|
|
DbControllers.m_ProdController.LockByProdId(ProjectManagerVM.CurrProd.nProdId, False, Map.refMainWindowVM.MainWindowM.GetKeyNumber())
|
|
ElseIf Map.refMainMenuVM.SelPage = Pages.ONLYPRODPAGE And Not IsNothing(Map.refOnlyProdManagerVM) AndAlso Not IsNothing(Map.refOnlyProdManagerVM.CurrProd) Then
|
|
DbControllers.m_ProdController.LockByProdId(Map.refOnlyProdManagerVM.CurrProd.nProdId, False, Map.refMainWindowVM.MainWindowM.GetKeyNumber())
|
|
End If
|
|
' Termino il Model
|
|
m_MainWindowM.Close()
|
|
' Termino il programma
|
|
Application.Current.Shutdown()
|
|
End Sub
|
|
|
|
#End Region ' CloseApplicationCommand
|
|
|
|
#End Region ' COMMANDS
|
|
|
|
End Class
|