NonSoft

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


 サンプル(ソース/コード)
フォーム(ウィンドウ)終了時のフォームサイズを保存して置き、次回実行時に前回のファームサイズを
回復するサンプルです。几帳面な方はいつも同じ所にウィンドウを同じサイズで表示したいと思うよう
です。プログラムを作る最初の作業としてこの処理をコピペするようにすると喜ばれるでしょう。
このサンプルで保存するファイルはXML形式でシリアライズと言う方法(iniファイルのようなもの)
を使用しています。

このサンプルは標準モジュールで作成しているのでクラスにした方が良いと思います。
このモジュールはPublic宣言している事に注意してください。

C#.NET版はこちら「フォームサイズを保存/回復するサンプル(C#.NET)」です。

★標準モジュール(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
        Dim Top As Integer
        Dim Width As Integer
        Dim Height As Integer
        Dim 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