|
フォームサイズを保存/回復するサンプル(VB.NET)

|
フォーム(ウィンドウ)終了時のフォームサイズを保存して置き、次回実行時に前回のファームサイズを
回復するサンプルです。几帳面な方はいつも同じ所にウィンドウを同じサイズで表示したいと思うよう
です。プログラムを作る最初の作業としてこの処理をコピペするようにすると喜ばれるでしょう。
このサンプルで保存するファイルはXML形式でシリアライズと言う方法(iniファイルのようなもの)
を使用しています。
このサンプルは標準モジュールで作成しているのでクラスにした方が良いと思います。
また、このモジュールはPublic宣言している事に注意してください。
★標準モジュール(Module1.vb)
Imports System.IO
Imports System.Text
Imports System.Xml.Serialization
Public Module Module1
''' <summary>
''' フォームサイズデータのフォルダ名
''' </summary>
Private Const DEF_FLD As String = "Env"
''' <summary>
''' フォームサイズデータのファイル名
''' </summary>
Private Const DEF_FIL As String = "WinInfo"
''' <summary>
''' フォームサイズデータ
''' </summary>
''' <remarks></remarks>
Public Class FromSizeDt
''' <summary>
''' フォームの左上Left座標
''' </summary>
''' <remarks></remarks>
Public Left As Integer = 300
''' <summary>
''' フォームの左上Top座標
''' </summary>
''' <remarks></remarks>
Public Top As Integer = 300
''' <summary>
''' フォームの横幅
''' </summary>
''' <remarks></remarks>
Public Width As Integer = 400
''' <summary>
''' フォームの縦幅
''' </summary>
''' <remarks></remarks>
Public Height As Integer = 95
''' <summary>
''' 通常/最小化/最大化
''' </summary>
''' <remarks></remarks>
Public WindowState As FormWindowState = FormWindowState.Normal
End Class
Public Fsdt As FromSizeDt = New FromSizeDt()
''' <summary>
''' フォームサイズのファイル保存
''' </summary>
''' <param name="FormName">フォーム名</param>
''' <param name="Left">フォームの左上Left座標</param>
''' <param name="Top">フォームの左上Top座標</param>
''' <param name="Width">フォームの横幅</param>
''' <param name="Height">フォームの縦幅</param>
''' <param name="WindowState">通常/最小化/最大化</param>
''' <remarks></remarks>
Public Sub SaveFromSize(ByVal FormName As String, _
ByVal Left As Integer, _
ByVal Top As Integer, _
ByVal Width As Integer, _
ByVal Height As Integer, _
ByVal WindowState As FormWindowState)
Dim sw As StreamWriter = Nothing
Try
' フォームサイズファイルのPATH設定
Dim AppPath As String = System.AppDomain.CurrentDomain.BaseDirectory
Dim SettingPath As String = AppPath & DEF_FLD & "\" + DEF_FIL & "_" & _
System.Reflection.Assembly.GetEntryAssembly().GetName().Name & "_" & FormName & ".xml"
' フォームサイズフォルダ作成
If Directory.Exists(DEF_FLD) = False Then
Directory.CreateDirectory(AppPath + DEF_FLD)
End If
' フォームサイズ設定
Fsdt.WindowState = WindowState
If WindowState = FormWindowState.Normal Then
Fsdt.Left = Left
Fsdt.Top = Top
Fsdt.Width = Width
Fsdt.Height = Height
End If
' フォームサイズ保存
sw = New StreamWriter(SettingPath, False, Encoding.Default)
Dim serializer As XmlSerializer = New XmlSerializer(GetType(FromSizeDt))
serializer.Serialize(sw, Fsdt)
Catch ex As Exception
System.Diagnostics.Debug.Write(ex)
Finally
If sw Is Nothing = False Then sw.Close()
End Try
End Sub
''' <summary>
''' フォームサイズのファイル読込
''' </summary>
''' <param name="FormName">フォーム名</param>
''' <param name="Left">フォームの左上Left座標</param>
''' <param name="Top">フォームの左上Top座標</param>
''' <param name="Width">フォームの横幅</param>
''' <param name="Height">フォームの縦幅</param>
''' <param name="WindowState">通常/最小化/最大化</param>
''' <remarks></remarks>
Public Sub ReadFromSize(ByVal FormName As String, _
ByRef Left As Integer, _
ByRef Top As Integer, _
ByRef Width As Integer, _
ByRef Height As Integer, _
ByRef WindowState As FormWindowState)
Dim sr As StreamReader = Nothing
Try
' フォームサイズファイルのPATH設定
Dim AppPath As String = System.AppDomain.CurrentDomain.BaseDirectory
Dim SettingPath As String = AppPath & DEF_FLD & "\" + DEF_FIL & "_" & _
System.Reflection.Assembly.GetEntryAssembly().GetName().Name & "_" & FormName & ".xml"
' フォームサイズ読込
sr = New StreamReader(SettingPath, Encoding.Default)
Dim serializer As XmlSerializer = New XmlSerializer(GetType(FromSizeDt))
Fsdt = CType(serializer.Deserialize(sr), FromSizeDt)
Catch ex As Exception
System.Diagnostics.Debug.Write(ex)
Finally
If sr Is Nothing = False Then sr.Close()
End Try
' フォームサイズ取得
Left = Fsdt.Left
Top = Fsdt.Top
Width = Fsdt.Width
Height = Fsdt.Height
WindowState = Fsdt.WindowState
End Sub
End Module
★フォームモジュール(Form1.vb)
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' フォームサイズ回復
Dim Left As Integer, Top As Integer, Width As Integer, Height As Integer, WindowState As FormWindowState
ReadFromSize(Me.Name, Left, Top, Width, Height, WindowState)
Me.Left = Left
Me.Top = Top
Me.Width = Width
Me.Height = Height
Me.WindowState = WindowState
End Sub
Private Sub Form1_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles MyBase.FormClosed
' フォームサイズ保存
SaveFromSize(Me.Name, Me.Left, Me.Top, Me.Width, Me.Height, Me.WindowState)
End Sub