Click here to Skip to main content
Click here to Skip to main content
Alternative Tip

Tagged as

Go to top

Very simple way to restore form window to its previous state

, 3 Jun 2011
Rate this:
Please Sign up or sign in to vote.
Here's another way. This saves the form's normal WindowState settings, so you can still save even if the form is minimized, and it can be used for any form. It also includes a sub to keep forms inside the desktop area.Check the Regpath string before using!...

Here's another way. This saves the form's normal WindowState settings, so you can still save even if the form is minimized, and it can be used for any form. It also includes a sub to keep forms inside the desktop area.

Check the Regpath string before using! Wink | ;)

'////////////////////////////////////////////////////
' Save & Restore form size and location.            /
' Check form size/edges, fit desktop working area.  /
'                                                   /
'             Edgemeal- June 03, 2011               /
'////////////////////////////////////////////////////

'---------------------------------
' example usage:
' --------------
'Sub Form_FormClosing(...
'    SavePosition(Me)
'End Sub
'
'Sub Form_Load(...
'    RestorePosition(Me)
'End Sub
'---------------------------------

Module ModFormLocSize
    Private Declare Function GetWindowPlacement Lib "user32" (ByVal hwnd As IntPtr, _
                                                              ByRef lpwndpl As WINDOWPLACEMENT) As Integer
    Private Regpath As String = "HKEY_CURRENT_USER\Software\" _
                                & Application.CompanyName _
                                & "\" & My.Application.Info.Title _
                                & "\"
 
    Private Structure POINTAPI
        Public x As Integer
        Public y As Integer
    End Structure
 
    Private Structure RECT
        Public Left As Integer
        Public Top As Integer
        Public Right As Integer
        Public Bottom As Integer
    End Structure
 
    Private Structure WINDOWPLACEMENT
        Public Length As Integer
        Public flags As Integer
        Public showCmd As Integer
        Public ptMinPosition As POINTAPI
        Public ptMaxPosition As POINTAPI
        Public rcNormalPosition As RECT
    End Structure
 
    Public Sub SavePosition(ByVal frm As Form)
        Dim wp As WINDOWPLACEMENT
        wp.Length = System.Runtime.InteropServices.Marshal.SizeOf(wp)
        GetWindowPlacement(frm.Handle, wp)
        With wp.rcNormalPosition
            My.Computer.Registry.SetValue(Regpath, frm.Name & "_Top", .Top)
            My.Computer.Registry.SetValue(Regpath, frm.Name & "_Left", .Left)
            My.Computer.Registry.SetValue(Regpath, frm.Name & "_Height", .Bottom - .Top)
            My.Computer.Registry.SetValue(Regpath, frm.Name & "_Width", .Right - .Left)
        End With
    End Sub
 
    Public Sub RestorePosition(ByVal frm As Form)
        ' get height value
        Dim H As Integer = CInt(My.Computer.Registry.GetValue(Regpath, frm.Name & "_Height", 0))
        ' if h=0 then assume settings were not yet saved, center the form, default size
        If H = 0 Then
            Dim screenW As Integer = Screen.PrimaryScreen.WorkingArea.Width
            Dim screenH As Integer = Screen.PrimaryScreen.WorkingArea.Height
            frm.Location = New Point(CInt((screenW - frm.Width) / 2), CInt((screenH - frm.Height) / 2))
        Else ' get remaining form settings
            Dim X As Integer = CInt(My.Computer.Registry.GetValue(Regpath, frm.Name & "_Left", 0))
            Dim Y As Integer = CInt(My.Computer.Registry.GetValue(Regpath, frm.Name & "_Top", 0))
            Dim W As Integer = CInt(My.Computer.Registry.GetValue(Regpath, frm.Name & "_Width", 0))
            ' set form location and size
            frm.Location = New Point(X, Y)
            frm.Size = New Size(W, H)
        End If
        ' check form size and location, keep inside desktop working area.
        CheckEdge(frm)
    End Sub
 
    Public Sub CheckEdge(ByVal Frm As Form)
        ' // Keep a form inside the desktop work area.//
        ' Edgemeal 02/12/2004 - Updated 06-03-2011 for VB10
        Dim Desktop As Rectangle = Screen.PrimaryScreen.WorkingArea
        Dim X As Integer = Frm.Left
        Dim Y As Integer = Frm.Top
        Dim W As Integer = Frm.Width
        Dim H As Integer = Frm.Height
        ' make sure form is not larger then desktop "working" area. (accounts for taskbar!)
        If H > (Desktop.Bottom - Desktop.Top) Then H = (Desktop.Bottom - Desktop.Top)
        If W > (Desktop.Right - Desktop.Left) Then W = (Desktop.Right - Desktop.Left)
        ' Check if edges are off screen.
        If Frm.Top < Desktop.Top Then Y = Desktop.Top
        If Frm.Left < Desktop.Left Then X = Desktop.Left
        If Y > Desktop.Bottom - H Then Y = Desktop.Bottom - H
        If X > Desktop.Right - W Then X = Desktop.Right - W
        ' reposition the window  'MoveWindow(Frm.Handle, X, Y, W, H, 1)
        Frm.Location = New Point(X, Y)
        Frm.Size = New Size(W, H)
    End Sub
 
End Module

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Edgemeal

United States United States
No Biography provided

Comments and Discussions

 
-- There are no messages in this forum --
| Advertise | Privacy | Mobile
Web02 | 2.8.140926.1 | Last Updated 3 Jun 2011
Article Copyright 2011 by Edgemeal
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid