Imports System.Collections.ObjectModel Imports System.IO Imports EgtUILib Imports EgtWPFLib5 Friend Module OptionModule ' Parametri che contengono lista delle lingue disponibili e lingua selezionata Friend m_LanguageList As New ObservableCollection(Of Language) Friend m_SelectedLanguage As Language Friend m_OptionLauncherList As New List(Of String) Friend m_SelectedOptionLauncher As String Friend m_sLastProject As String = String.Empty ' Parametri che contengono lista delle unità di misura disponibili e quella selezionata Friend m_MeasureUnitList As New List(Of String)({"mm", "Inches"}) Friend m_SelectedMeasureUnit As String Friend m_bIsMmUnit As Boolean ' Paramaetri per la scelta del bevel Friend m_bBevelUp As Visibility Friend m_bBevelDown As Visibility Friend Enum LauncherWindow As Integer Open_window = 0 Open_last_project = 1 Empty = 2 End Enum Friend Enum ConfigType As Integer Door = 0 Assembly = 1 End Enum Friend m_SmartHelp As Boolean = False Friend m_DisableHM As Boolean = False Friend m_Width As String Friend m_Height As String Friend m_Thickness As String Friend m_Weight As String Friend m_SwingTypeList As New List(Of String) Friend m_Swing As String Friend m_StaticEdgeTypeList As New ObservableCollection(Of String) Friend m_LockEdgeType As New EdgeType("", Visibility.Visible) Friend m_HingeEdgeType As New EdgeType("", Visibility.Visible) Friend m_TopType As New EdgeType("", Visibility.Visible) Friend m_BottomType As New EdgeType("", Visibility.Visible) Friend m_LockEdgeMachining As Boolean Friend m_HingeEdgeMachining As Boolean Friend m_TopMachining As Boolean Friend m_BottomMachining As Boolean Friend m_LockEdgeOverMaterial As String Friend m_HingeEdgeOverMaterial As String Friend m_TopOverMaterial As String Friend m_BottomOverMaterial As String Friend m_SwingTypeListSinlgeDoor As New List(Of String) Friend m_SwingTypeListLeftDoor As New List(Of String) Friend m_SwingTypeListRightDoor As New List(Of String) Friend m_ConfigurationSoftware As ConfigType Friend m_Disposition As New EdgeType("BySwing", Visibility.Visible) Friend m_sDisposition As String = "BySwing" Friend m_ThicknessJamb As String Friend m_WidthJamb As String Friend m_LightUp As String Friend m_LightLock As String Friend m_LightHinge As String Friend m_LightBottom As String Friend m_ThicknessHead As String Friend m_OverlapLock As String Friend m_OverlapHinge As String Friend m_Exterior As Boolean Friend m_OverlapTop As String Friend m_DeltaThickness As String Friend m_DoorsListNumber As New List(Of String) Friend m_DoorsNumber As String Friend m_TopJambChk As Boolean Friend m_LeftJambChk As Boolean Friend m_BottomJambChk As Boolean Friend m_RightJambChk As Boolean Friend m_LockEdgeTypeAssembly As New EdgeType("", Visibility.Visible) Friend m_HingeEdgeTypeAssembly As New EdgeType("", Visibility.Visible) Friend m_TopTypeAssembly As New EdgeType("", Visibility.Visible) Friend m_BottomTypeAssembly As New EdgeType("", Visibility.Visible) Friend m_LockEdgeMachiningAssembly As Boolean Friend m_HingeEdgeMachiningAssembly As Boolean Friend m_TopMachiningAssembly As Boolean Friend m_BottomMachiningAssembly As Boolean Friend m_LockEdgeOverMaterialAssembly As String Friend m_HingeEdgeOverMaterialAssembly As String Friend m_TopOverMaterialAssembly As String Friend m_BottomOverMaterialAssembly As String Friend m_CompoPaneOrder As List(Of String) = New List(Of String) ' inizializzazione lettura variabili ad inizio programma Friend Sub InitOptionModule() ' Leggo elenco lingue disponibili da file ini Dim nIndex As Integer = 1 Dim ReadLanguage As Language = GetPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & nIndex) While Not IsNothing(ReadLanguage) m_LanguageList.Add(ReadLanguage) nIndex += 1 ReadLanguage = GetPrivateProfileLanguage(S_LANGUAGES, K_LANGUAGE & nIndex) End While ' Leggo direttorio dei messaggi (se manca uso direttorio di configurazione) Dim sMsgDir As String = String.Empty If GetMainPrivateProfileString(S_GENERAL, K_MESSAGESDIR, "", sMsgDir) = 0 Then sMsgDir = IniFile.m_sConfigDir End If ' Leggo file messaggi Dim sMsgName As String = String.Empty GetMainPrivateProfileString(S_GENERAL, K_MESSAGES, "", sMsgName) Dim sMsgFilePath As String = sMsgDir & "\EgalTechEng.txt" For Each Language In OptionModule.m_LanguageList If Language.Name = sMsgName Then GuideV.m_Language = sMsgName OptionModule.m_SelectedLanguage = Language sMsgFilePath = sMsgDir & "\" & Language.FilePath End If Next If Not EgtLoadMessages(sMsgFilePath) Then EgtOutLog(EgtMsg(50127)) End If 'i valori della pagina dell'assemblato Dim Config As Integer = GetMainPrivateProfileInt(S_GENERAL, K_RUNAS, 0) m_ConfigurationSoftware = If(Config = 0, ConfigType.Door, ConfigType.Assembly) ' imposto unità di misura per interfaccia utente m_bIsMmUnit = (GetMainPrivateProfileInt(S_SCENE, K_MMUNITS, 1) <> 0) EgtSetUiUnits(m_bIsMmUnit) If m_bIsMmUnit Then m_SelectedMeasureUnit = m_MeasureUnitList(0) Else m_SelectedMeasureUnit = m_MeasureUnitList(1) End If ' imposto tipo di avvio Dim nOptionLauncher As Integer = GetMainPrivateProfileInt(S_LAUNCHERWINDOW, K_LAUNCHER, 0) ' leggo il direttorio di salvataggio dei progetti Dim sMyProjectDir As String = String.Empty If GetMainPrivateProfileString(S_DOORS, K_MYPROJECTDIR, "", sMyProjectDir) <> 0 Then ' se non esiste il direttorio If Not Directory.Exists(sMyProjectDir) Then ' manntego l'accesso a quello di default EgtOutLog("Warning : " & sMyProjectDir & " does not exist") ' controllo che il direttorio che era stato passato di default esista If Not Directory.Exists(IniFile.m_MyProjectDir) Then ' creo il direttorio Directory.CreateDirectory(IniFile.m_MyProjectDir) End If Else IniFile.m_MyProjectDir = sMyProjectDir End If End If Dim sTemplateDir As String = String.Empty If GetMainPrivateProfileString(S_DOORS, K_TEMPLATEDIR, "", sTemplateDir) <> 0 Then ' se non esiste il direttorio If Not Directory.Exists(sTemplateDir) Then ' manntego l'accesso a quello di default EgtOutLog("Warning : " & sTemplateDir & " does not exist") ' controllo che il direttorio che era stato passato di default esista If Not Directory.Exists(IniFile.m_TemplateDir) Then ' creo il direttorio Directory.CreateDirectory(IniFile.m_TemplateDir) End If Else IniFile.m_TemplateDir = sTemplateDir End If End If Dim sMachinDir As String = String.Empty If GetMainPrivateProfileString(S_DOORS, K_MACHINDIR, "", sMachinDir) <> 0 Then If Not Directory.Exists(sMachinDir) Then ' mantengo l'accesso a quello di default EgtOutLog("Warning : " & sMachinDir & " does not exist") ' controllo che il direttorio che era stato passato di default esista Else IniFile.m_MachinProject = sMachinDir End If End If Dim nSmartHelp As Integer = 1 nSmartHelp = GetMainPrivateProfileInt(S_GENERAL, K_SMARTHELP, 1) If nSmartHelp = 0 Then m_SmartHelp = True Else m_SmartHelp = False End If Dim nDisableHM As Integer = 1 nDisableHM = GetMainPrivateProfileInt(S_GENERAL, K_DISABLEHM, 1) If nDisableHM = 0 Then m_DisableHM = True Else m_DisableHM = False End If ' leggo il tipo di Bevel selezionato Dim BevelUp As Visibility DefaultGetPrivateProfilesBevel(S_EDGE, K_BEVELU_INI, BevelUp) m_bBevelUp = BevelUp Dim BevelDown As Visibility DefaultGetPrivateProfilesBevel(S_EDGE, K_BEVELD_INI, BevelDown) m_bBevelDown = BevelDown 'disposizione in macchina delle porte (variabile globale) Select Case GetMainPrivateProfileInt(S_GENERAL, K_DISPOSITION, 0) Case 0 m_Disposition.Name = "BySwing" Case 1 m_Disposition.Name = "BD" Case 2 m_Disposition.Name = "BU" End Select ' questa variabile deve essere usata solo in locale per settare la visibilità della optionpage dei bevel m_sDisposition = m_Disposition.Name ' se esiste una selezione allora non mostrare a video If m_Disposition.Name.Contains("BU") Then m_bBevelUp = Visibility.Visible m_bBevelDown = Visibility.Collapsed ElseIf m_Disposition.Name.Contains("BD") Then m_bBevelUp = Visibility.Collapsed m_bBevelDown = Visibility.Visible End If ' Leggo le dimensioni della porta dal file Default.ini Dim Width As String = String.Empty DefaultGetPrivateProfileString(S_SIZE_INI, K_WIDTH_INI, "32", Width) m_Width = Width Dim Height As String = String.Empty DefaultGetPrivateProfileString(S_SIZE_INI, K_HEIGHT_INI, "80", Height) m_Height = Height Dim Thickness As String = String.Empty DefaultGetPrivateProfileString(S_SIZE_INI, K_THICKNESS_INI, "1.75", Thickness) m_Thickness = Thickness ' carico i valori associati allo swing della porta Dim SwingTypeList As New List(Of String) DefaultGetPrivateProfileList(S_SIZE_INI, K_SWING_LIST_INI, SwingTypeList) m_SwingTypeList = SwingTypeList Dim Swing As String = String.Empty DefaultGetPrivateProfileString(S_SIZE_INI, K_SWING_INI, "RH", Swing) m_Swing = Swing LoadSwingList() Dim Weight As String = String.Empty DefaultGetPrivateProfileString(S_SIZE_INI, K_WEIGHT_INI, "25", Weight) m_Weight = Weight Dim WeightVisibility As Visibility = Visibility.Collapsed DefaultGetPrivateProfilesVisibility(S_SIZE_INI, K_WEIGHTISCHECKED_INI, WeightVisibility) Part.IsCheckedWeight = WeightVisibility ' carico il valori associati al tipo di spigolo Dim EdgeTypeList As New ObservableCollection(Of String) DefaultGetPrivateProfileObservableCollection(S_EDGE, K_EDGETYPE_LIST_INI, EdgeTypeList) m_StaticEdgeTypeList = EdgeTypeList OptionsVM.CreateEdgeTypeList() ' carico i valori associati agli spigoli Dim LockEdgeType As String = String.Empty DefaultGetPrivateProfileString(S_EDGE, K_LOCKEDGE_INI, "", LockEdgeType) For Index = 0 To OptionsVM.LockEdgeTypeList.Count - 1 If OptionsVM.LockEdgeTypeList(Index).Name = LockEdgeType Then m_LockEdgeType = OptionsVM.LockEdgeTypeList(Index) End If Next If String.IsNullOrWhiteSpace(m_LockEdgeType.Name) Then m_LockEdgeType = OptionsVM.LockEdgeTypeList(0) Dim HingeEdgeType As String = String.Empty DefaultGetPrivateProfileString(S_EDGE, K_HINGEDGE_INI, "SQ", HingeEdgeType) For Index = 0 To OptionsVM.HingeEdgeTypeList.Count - 1 If OptionsVM.HingeEdgeTypeList(Index).Name = HingeEdgeType Then m_HingeEdgeType = OptionsVM.HingeEdgeTypeList(Index) End If Next If String.IsNullOrWhiteSpace(m_HingeEdgeType.Name) Then m_HingeEdgeType = OptionsVM.HingeEdgeTypeList(0) Dim TopType As String = String.Empty DefaultGetPrivateProfileString(S_EDGE, K_TOPEDGE_INI, "SQ", TopType) For Index = 0 To OptionsVM.TopEdgeTypeList.Count - 1 If OptionsVM.TopEdgeTypeList(Index).Name = TopType Then m_TopType = OptionsVM.TopEdgeTypeList(Index) End If Next If String.IsNullOrWhiteSpace(m_TopType.Name) Then m_TopType = OptionsVM.TopEdgeTypeList(0) Dim BottomType As String = String.Empty DefaultGetPrivateProfileString(S_EDGE, K_BOTTOMEDGE_INI, "SQ", BottomType) For Index = 0 To OptionsVM.BottomEdgeTypeList.Count - 1 If OptionsVM.BottomEdgeTypeList(Index).Name = BottomType Then m_BottomType = OptionsVM.BottomEdgeTypeList(Index) End If Next If String.IsNullOrWhiteSpace(m_BottomType.Name) Then m_BottomType = OptionsVM.BottomEdgeTypeList(0) ' Carico i valori booleani associati alla lavorazione Dim LockEdgeMachining As Boolean = False DefaultGetPrivateProfilesMachining(S_MACHINING, K_LOCKEDGEISCHECKED_INI, LockEdgeMachining) m_LockEdgeMachining = LockEdgeMachining Dim HingeEdgeMachining As Boolean = False DefaultGetPrivateProfilesMachining(S_MACHINING, K_HINGEDGEEISCHECKED_INI, HingeEdgeMachining) m_HingeEdgeMachining = HingeEdgeMachining Dim TopMachining As Boolean = False DefaultGetPrivateProfilesMachining(S_MACHINING, K_TOPISCHECKED_INI, TopMachining) m_TopMachining = TopMachining Dim BottomMachining As Boolean = False DefaultGetPrivateProfilesMachining(S_MACHINING, K_BOTTOMISCHECKED_INI, BottomMachining) m_BottomMachining = BottomMachining ' carico i valori di overmaterial Dim LockEdgeOverMaterial As String = String.Empty DefaultGetPrivateProfileString(S_OVERMATERIAL, K_LOCKEDGEOVERMATERIAL_INI, "", LockEdgeOverMaterial) m_LockEdgeOverMaterial = LockEdgeOverMaterial Dim HingeEdgeOverMaterial As String = String.Empty DefaultGetPrivateProfileString(S_OVERMATERIAL, K_HINGEDGEOVERMATERIAL_INI, "", HingeEdgeOverMaterial) m_HingeEdgeOverMaterial = HingeEdgeOverMaterial Dim TopOverMaterial As String = String.Empty DefaultGetPrivateProfileString(S_OVERMATERIAL, K_TOPOVERMATERIAL_INI, "", TopOverMaterial) m_TopOverMaterial = TopOverMaterial Dim BottomOverMaterial As String = String.Empty DefaultGetPrivateProfileString(S_OVERMATERIAL, K_BOTTOMOVERMATERIAL_INI, "", BottomOverMaterial) m_BottomOverMaterial = BottomOverMaterial ' carico l'ordinamento delle componenti DefaultGetPrivateProfileList(S_COMPOORDER, K_COMPOORDER_INI, DdfFile.CompoListOrder) ' carico l'ordinamento dei bottoni DefaultGetPrivateProfileList(S_COMPOOPANELORDER_INI, K_COMPOORDER_INI, m_CompoPaneOrder) '----------------------------------------------------------------------------------------------------------------- Dim ThicknessJamb As String = String.Empty DefaultGetPrivateProfileString(S_SIZEJAMB, K_THICKNESS, "25", ThicknessJamb) m_ThicknessJamb = ThicknessJamb Dim WidthJamb As String = String.Empty DefaultGetPrivateProfileString(S_SIZEJAMB, K_WIDTH, "25", WidthJamb) m_WidthJamb = WidthJamb Dim LightUp As String = String.Empty DefaultGetPrivateProfileString(S_LIGHT, K_LIGHTUP, "25", LightUp) m_LightUp = LightUp Dim LightLock As String = String.Empty DefaultGetPrivateProfileString(S_LIGHT, K_LIGHTLOCK, "25", LightLock) m_LightLock = LightLock Dim LightHinge As String = String.Empty DefaultGetPrivateProfileString(S_LIGHT, K_LIGHTHINGE, "25", LightHinge) m_LightHinge = LightHinge Dim LightBottom As String = String.Empty DefaultGetPrivateProfileString(S_LIGHT, K_LIGHTBOTTOM, "25", LightBottom) m_LightBottom = LightBottom DefaultGetPrivateProfileList(S_DOORSNUMBER, K_DOORSLISTNUMBER, m_DoorsListNumber) Dim DoorsNumber As String = String.Empty DefaultGetPrivateProfileString(S_DOORSNUMBER, K_DOORSELECTEDTNUMBER, "0", DoorsNumber) m_DoorsNumber = DoorsNumber Dim ThicknessHead As String = String.Empty DefaultGetPrivateProfileString(S_OVERLAP, K_THICKNESSHEAD, "0", ThicknessHead) m_ThicknessHead = ThicknessHead Dim OverlapHinge As String = String.Empty DefaultGetPrivateProfileString(S_OVERLAP, K_OVERLAPHINGE, "0", OverlapHinge) m_OverlapHinge = OverlapHinge Dim OverlapLock As String = String.Empty DefaultGetPrivateProfileString(S_OVERLAP, K_OVERLAPLOCK, "0", OverlapLock) m_OverlapLock = OverlapLock Dim Exterior As Boolean = False DefaultGetPrivateProfilesMachining(S_OVERLAP, K_EXTERIOR, Exterior) m_Exterior = Exterior Dim OverlapTop As String = String.Empty DefaultGetPrivateProfileString(S_OVERLAP, K_OVERLAPTOP, "0", OverlapTop) m_OverlapTop = OverlapTop Dim DeltaT As String = String.Empty DefaultGetPrivateProfileString(S_OVERLAP, K_DELTAT, "0", DeltaT) m_DeltaThickness = DeltaT Dim TopChk As Boolean = False DefaultGetPrivateProfilesMachining(S_PART, K_TOPJAMB, TopChk) m_TopJambChk = TopChk Dim LeftChk As Boolean = False DefaultGetPrivateProfilesMachining(S_PART, K_LEFTJAMB, LeftChk) m_LeftJambChk = LeftChk Dim BottomChk As Boolean = False DefaultGetPrivateProfilesMachining(S_PART, K_BOTTOMJAMB, BottomChk) m_BottomJambChk = BottomChk Dim RightChk As Boolean = False DefaultGetPrivateProfilesMachining(S_PART, K_RIGHTJAMB, RightChk) m_RightJambChk = RightChk Dim LockEdgeTypeAss As String = String.Empty DefaultGetPrivateProfileString(S_EDGEASSEMBLY, K_LOCKEDGE, "SQ", LockEdgeTypeAss) For Index = 0 To OptionsVM.FrameEdgeTypeList.Count - 1 If OptionsVM.FrameEdgeTypeList(Index).Name = LockEdgeTypeAss Then m_LockEdgeTypeAssembly = OptionsVM.FrameEdgeTypeList(Index) End If Next Dim HingeEdgeTypeAss As String = String.Empty DefaultGetPrivateProfileString(S_EDGEASSEMBLY, K_HINGEDGE_INI, "SQ", HingeEdgeTypeAss) For Index = 0 To OptionsVM.FrameEdgeTypeList.Count - 1 If OptionsVM.FrameEdgeTypeList(Index).Name = HingeEdgeTypeAss Then m_HingeEdgeTypeAssembly = OptionsVM.FrameEdgeTypeList(Index) End If Next Dim TopTypeAss As String = String.Empty DefaultGetPrivateProfileString(S_EDGEASSEMBLY, K_TOPEDGE_INI, "SQ", TopTypeAss) For Index = 0 To OptionsVM.FrameEdgeTypeList.Count - 1 If OptionsVM.FrameEdgeTypeList(Index).Name = TopTypeAss Then m_TopTypeAssembly = OptionsVM.FrameEdgeTypeList(Index) End If Next Dim BottomTypeAss As String = String.Empty DefaultGetPrivateProfileString(S_EDGEASSEMBLY, K_BOTTOMEDGE_INI, "SQ", BottomTypeAss) For Index = 0 To OptionsVM.FrameEdgeTypeList.Count - 1 If OptionsVM.FrameEdgeTypeList(Index).Name = BottomTypeAss Then m_BottomTypeAssembly = OptionsVM.FrameEdgeTypeList(Index) End If Next ' Carico i valori booleani associati alla lavorazione Dim LockEdgeMachiningAss As Boolean = False DefaultGetPrivateProfilesMachining(S_MACHININGASSEMBLY, K_LOCKEDGEISCHECKED_INI, LockEdgeMachiningAss) m_LockEdgeMachiningAssembly = LockEdgeMachiningAss Dim HingeEdgeMachiningAss As Boolean = False DefaultGetPrivateProfilesMachining(S_MACHININGASSEMBLY, K_HINGEDGEEISCHECKED_INI, HingeEdgeMachiningAss) m_HingeEdgeMachiningAssembly = HingeEdgeMachiningAss Dim TopMachiningAss As Boolean = False DefaultGetPrivateProfilesMachining(S_MACHININGASSEMBLY, K_TOPISCHECKED_INI, TopMachiningAss) m_TopMachiningAssembly = TopMachiningAss Dim BottomMachiningAss As Boolean = False DefaultGetPrivateProfilesMachining(S_MACHININGASSEMBLY, K_BOTTOMISCHECKED_INI, BottomMachiningAss) m_BottomMachiningAssembly = BottomMachiningAss ' carico i valori di overmaterial Dim LockEdgeOverMaterialAss As String = String.Empty DefaultGetPrivateProfileString(S_OVERMATERIALASSEMBLY, K_LOCKEDGEOVERMATERIAL_INI, "", LockEdgeOverMaterialAss) m_LockEdgeOverMaterialAssembly = LockEdgeOverMaterialAss Dim HingeEdgeOverMaterialAss As String = String.Empty DefaultGetPrivateProfileString(S_OVERMATERIALASSEMBLY, K_HINGEDGEOVERMATERIAL_INI, "", HingeEdgeOverMaterialAss) m_HingeEdgeOverMaterialAssembly = HingeEdgeOverMaterialAss Dim TopOverMaterialAss As String = String.Empty DefaultGetPrivateProfileString(S_OVERMATERIALASSEMBLY, K_TOPOVERMATERIAL_INI, "", TopOverMaterialAss) m_TopOverMaterialAssembly = TopOverMaterialAss Dim BottomOverMaterialAss As String = String.Empty DefaultGetPrivateProfileString(S_OVERMATERIALASSEMBLY, K_BOTTOMOVERMATERIAL_INI, "", BottomOverMaterialAss) m_BottomOverMaterialAssembly = BottomOverMaterialAss m_OptionLauncherList.Add(EgtMsg(50206)) m_OptionLauncherList.Add(EgtMsg(50207)) m_OptionLauncherList.Add(EgtMsg(50208)) ' assegno il valore selezioato dalla lista m_SelectedOptionLauncher = m_OptionLauncherList(nOptionLauncher) End Sub Friend Sub SetEdgeTypeList(EdgeTypeList As ObservableCollection(Of String), bBevelUp As Boolean, bBevelDown As Boolean) If Not bBevelUp Then EdgeTypeList.Remove("BU") End If If Not bBevelDown Then EdgeTypeList.Remove("BD") End If End Sub Private Sub LoadSwingList() For Index As Integer = 0 To 3 m_SwingTypeListSinlgeDoor.Add(m_SwingTypeList(Index)) Next For Index As Integer = 4 To 7 m_SwingTypeListLeftDoor.Add(m_SwingTypeList(Index)) Next For Index As Integer = 8 To 11 m_SwingTypeListRightDoor.Add(m_SwingTypeList(Index)) Next End Sub Public Function DispositionVisibility() As Visibility ' se non è selezionata nessuna disposizione allora deve essere selezionabile da interfaccia If IsNothing(m_Disposition) Then Return Visibility.Visible ElseIf m_Disposition.Name <> "BU" And m_Disposition.Name <> "BD" Then Return Visibility.Visible Else Return Visibility.Collapsed End If End Function Public Function DispositionBoolean() As Boolean ' per rendere selezionabile la disposizione dalla pagina delle opzioni If IsNothing(m_sDisposition) Then Return True ElseIf m_sDisposition <> "BU" And m_sDisposition <> "BD" Then Return True Else Return False End If End Function End Module ' Classe che identifica una lingua del programma con nome e path del file dei messaggi Public Class Language Private m_sName As String Private m_sFilePath As String Public Property Name As String Get Return m_sName End Get Set(value As String) m_sName = value End Set End Property Public Property FilePath As String Get Return m_sFilePath End Get Set(value As String) m_sFilePath = value End Set End Property Sub New(sName As String, sFilePath As String) Me.Name = sName Me.FilePath = sFilePath End Sub End Class