|
|||||
フォーム(ウィンドウ)終了時のフォームサイズを保存して置き、次回実行時に前回のファームサイズを 回復するサンプルです。几帳面な方はいつも同じ所にウィンドウを同じサイズで表示したいと思うよう です。プログラムを作る最初の作業としてこの処理をコピペするようにすると喜ばれるでしょう。 このサンプルで保存するファイルは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 |