SchreiberM 3a2dadb3ee MS
2017-02-08 15:39:43 +01:00

166 lines
5.5 KiB
VB.net

Imports System.Xml
Imports System.IO
Public Class ClassWindowLocation
Public Shared Sub LoadFormLocationSize(ByRef form As Form, Optional Prefix As String = "")
Try
Dim LayoutPath As String
LayoutPath = Path.Combine(Application.UserAppDataPath(), Prefix & form.Name & "-PositionSize.xml")
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
form.WindowState = FormWindowState.Maximized
Else
If x > 0 Then
form.Location = New Point(x, y)
form.Size = New Size(w, h)
End If
End If
Next
Catch notFoundEx As System.IO.FileNotFoundException
ClassLogger.Add("Window Position & Size added for Form " & form.Name)
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, Optional Prefix As String = "")
Try
Dim _path As String
_path = Path.Combine(Application.UserAppDataPath(), Prefix & form.Name & "-PositionSize.xml")
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 Form " & form.Name)
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 List(Of ClassSetting) = New 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