Imports System.Xml Imports System.IO Public Class ClassWindowLocation Public Shared Sub LoadFormLocationSize(ByRef form As Form, FormID As Integer, ScreenID As Integer, Optional Prefix As String = "") Try Dim LayoutPath As String If FormID = 99 Then LayoutPath = Path.Combine(Application.UserAppDataPath(), Prefix & "-PositionSize.xml") Else LayoutPath = Path.Combine(Application.UserAppDataPath(), Prefix & "SCREEN" & ScreenID & "-FORM" & FormID & "-PositionSize.xml") End If Dim layout As ClassLayout = New ClassLayout(LayoutPath) Dim settings As System.Collections.Generic.List(Of ClassSetting) settings = layout.Load() If settings.Count = 0 Then settings.Add(New ClassSetting("PositionX", form.Location.X)) settings.Add(New ClassSetting("PositionY", form.Location.Y)) settings.Add(New ClassSetting("Width", form.Size.Width)) settings.Add(New ClassSetting("Height", form.Size.Height)) layout.Save(settings) End If For Each s As ClassSetting In settings Dim x, y, w, h As Integer Select Case s._name Case "PositionX" x = Integer.Parse(s._value) Case "PositionY" y = Integer.Parse(s._value) Case "Width" w = Integer.Parse(s._value) Case "Height" h = Integer.Parse(s._value) End Select If x = 5000 Then Select Case Prefix Case "frmTool_FormDesigner" ClassLogger.Add(">> frmTool_FormDesigner - Maximize Eigenschaft Form wird nicht gesetzt.", False) Case "frmTool_ControlProperties" ClassLogger.Add(">> frmTool_ControlProperties - Maximize Eigenschaft Form wird nicht gesetzt.", False) Case Else form.WindowState = FormWindowState.Maximized End Select Else If x > 0 Then Select Case Prefix Case "frmTool_FormDesigner" form.Location = New Point(x, y) Case "frmTool_ControlProperties" form.Location = New Point(x, y) Case Else form.Location = New Point(x, y) form.Size = New Size(w, h) End Select End If End If Next Catch notFoundEx As System.IO.FileNotFoundException ClassLogger.Add("Window Position & Size added for Screen " & ScreenID & ", Form " & FormID) Catch ex As Exception MsgBox("Error while loading Window Position!" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub Public Shared Sub SaveFormLocationSize(ByRef form As Form, FormID As Integer, ScreenID As Integer, Optional Prefix As String = "") Try Dim _path As String If FormID = 99 Then _path = Path.Combine(Application.UserAppDataPath(), Prefix & "-PositionSize.xml") Else _path = Path.Combine(Application.UserAppDataPath(), Prefix & "SCREEN" & ScreenID & "-FORM" & FormID & "-PositionSize.xml") End If Dim layout As ClassLayout = New ClassLayout(_path) Dim settings As System.Collections.Generic.List(Of ClassSetting) = New System.Collections.Generic.List(Of ClassSetting) Dim width As Integer Dim height As Integer Dim x As Integer Dim y As Integer If form.WindowState = FormWindowState.Maximized Then width = 5000 height = 5000 x = 5000 y = 5000 Else width = form.Size.Width height = form.Size.Height x = form.Location.X y = form.Location.Y End If settings.Add(New ClassSetting("PositionX", x)) settings.Add(New ClassSetting("PositionY", y)) settings.Add(New ClassSetting("Width", width)) settings.Add(New ClassSetting("Height", height)) layout.Save(settings) Catch notFoundEx As System.IO.FileNotFoundException ClassLogger.Add("Window Position & Size added for Screen " & ScreenID & ", Form " & FormID) Catch ex As Exception MsgBox("Error while saving Window Position!" & vbNewLine & ex.Message, MsgBoxStyle.Critical) End Try End Sub End Class '------------------------------------------------------------------- Public Class ClassSetting Public _name As String Public _value As String Public Sub New(name As String, value As String) _name = name _value = value End Sub End Class Public Class ClassLayout Private _filename As String Private _reader As XmlReader Private _settings As XmlWriterSettings Public Sub New(filename As String) _filename = filename _settings = New XmlWriterSettings() _settings.Encoding = System.Text.Encoding.UTF8 _settings.Indent = True End Sub Public Sub Save(settings As System.Collections.Generic.List(Of ClassSetting)) Dim w = XmlTextWriter.Create(_filename, _settings) w.WriteStartDocument() w.WriteStartElement("Settings") For Each setting As ClassSetting In settings w.WriteStartElement("Setting") w.WriteAttributeString("name", setting._name) w.WriteAttributeString("value", setting._value.ToString()) w.WriteEndElement() Next w.WriteEndElement() w.WriteEndDocument() w.Dispose() w.Close() End Sub Public Function Load() As System.Collections.Generic.List(Of ClassSetting) Dim Result As System.Collections.Generic.List(Of ClassSetting) = New System.Collections.Generic.List(Of ClassSetting)() If Not File.Exists(_filename) Then Return Result End If _reader = XmlReader.Create(_filename) While _reader.Read() If _reader.IsStartElement() Then If _reader.Name = "Setting" Then Dim name As String = _reader("name") ' Dim value As Integer = Integer.Parse(_reader("value")) Dim setting As ClassSetting = New ClassSetting(name, _reader("value")) 'value) Result.Add(setting) End If End If End While _reader.Dispose() _reader.Close() Return Result End Function End Class