Joe Morgan
Joe Morgan

Reputation: 1771

Save Windows Form Size

I'm developing a piece in VB.NET. Inside my primary form, I'm creating a new form to use as a dialog. I was wondering if there was a way to, upon the close of the new dialog, save it's size settings for each user (probably in a file on their machine, through XML or something?)

Upvotes: 7

Views: 8171

Answers (6)

Aaron
Aaron

Reputation: 341

Here's a solution that I found online that seems to work rather well for me.

Some of the previously mentioned solutions weren't working for me as expected. Depending on where my form was positioned at the time of closing the form wouldn't get repositioned back to that exact location when I would load it again.

This solution seems to do the trick by taking into account some other factors as well:

You need to set up these two setting under Project Properties -> settings: WindowLocation and WindowSize like so:

enter image description here

Then create the following function:

Private Sub LoadWindowPosition()

    'Get window location/position from settings
    Dim ptLocation As System.Drawing.Point = My.Settings.WindowLocation

    'Exit if it has not been set (X = Y = -1)
    If (ptLocation.X = -1) And (ptLocation.Y = -1) Then
        Return
    End If

    'Verify the window position is visible on at least one of our screens
    Dim bLocationVisible As Boolean = False

    For Each S As Screen In Screen.AllScreens
        If S.Bounds.Contains(ptLocation) Then
            bLocationVisible = True
            Exit For
        End If
    Next

    'Exit if window location is not visible on any screen 
    If Not bLocationVisible Then
        Return
    End If

    'Set Window Size, Location
    Me.StartPosition = FormStartPosition.Manual
    Me.Location = ptLocation
    Me.Size = My.Settings.WindowSize
End Sub

Next, you'll need to add code to your form's load and closing events like so:

Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    LoadWindowPosition()
End Sub

Private Sub frmMain_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
    My.Settings.WindowLocation = Me.Location
    My.Settings.WindowSize = Me.Size
End Sub

I hope that helps.

Upvotes: 1

Waleed El-Safty
Waleed El-Safty

Reputation: 21

You can also add a new setting to your application (size) and set it to system.drawing.size

Then, you make sure you save the current size to settings on close.

    Private Sub myForm_FormClosing(ByVal sender As System.Object,
                          ByVal e As System.Windows.Forms.FormClosingEventArgs) _
                             Handles MyBase.FormClosing

    My.Settings.size = Me.Size
    My.Settings.Save()

End Sub

and on load you apply the size you have saved in settings

    Private Sub myForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles MyBase.Load
    ' if  this is the first  time to load the form 
    ' dont set the size ( the form will load  with the size  in the designe)
    If Not My.Settings.size.IsEmpty Then
        Me.Size = My.Settings.size
    End If
End Sub

Upvotes: 2

Joe Morgan
Joe Morgan

Reputation: 1771

As it turns out, I found a way to do this using the System.IO.IsolatedStorage

Upvotes: 0

Hath
Hath

Reputation: 12769

you can save it to the settings file, and update it on the 'onclosing' event.

to make a setting goto Project Properties ->settings -> then make a setting like 'dialogsize' of type system.drawing.size.

then do this in your dialog form:

Public Sub New()
    InitializeComponent()
End Sub

Public Sub New(ByVal userSize As Size)
    InitializeComponent()
    Me.Size = userSize
End Sub

Protected Overrides Sub OnClosing(ByVal e As System.ComponentModel.CancelEventArgs)
    MyBase.OnClosing(e)
    My.Settings.DialogSize = Me.Size
    My.Settings.Save()
End Sub

do something like this to check and use the setting:

    Dim dlg As MyDialogWindow
    If My.Settings.DialogSize.IsEmpty Then
        dlg = New MyDialogWindow()
    Else
        dlg = New MyDialogWindow(My.Settings.DialogSize)
    End If
    dlg.ShowDialog()

Upvotes: 7

Keithius
Keithius

Reputation: 1124

You can also do this using the UI provided by the VB.NET IDE itself. In the properties pane for a form, look under the item called "(Application Settings)" and then under "Property Binding." You can bind just about every property of the form (including size and location) to a settings value for that application.

Upvotes: 0

Kris Erickson
Kris Erickson

Reputation: 33834

Although this is for C#, it will help with VB.Net as well.

Upvotes: 2

Related Questions