7

我正在用 VB.NET 开发一块。在我的主要表单中,我正在创建一个用作对话框的新表单。我想知道是否有办法在新对话框关闭时为每个用户保存它的大小设置(可能在他们机器上的文件中,通过 XML 或其他方式?)

4

6 回答 6

7

您可以将其保存到设置文件中,并在“关闭”事件中更新它。

进行设置转到项目属性->设置->然后进行设置,如 system.drawing.size 类型的“对话框大小”。

然后在您的对话框表单中执行此操作:

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

做这样的事情来检查和使用设置:

    Dim dlg As MyDialogWindow
    If My.Settings.DialogSize.IsEmpty Then
        dlg = New MyDialogWindow()
    Else
        dlg = New MyDialogWindow(My.Settings.DialogSize)
    End If
    dlg.ShowDialog()
于 2008-10-22T14:17:00.010 回答
2

虽然这是针对 C#的,但它对 VB.Net 也有帮助。

于 2008-10-22T14:00:40.137 回答
2

您还可以向您的应用程序(大小)添加新设置并将其设置为system.drawing.size

然后,确保在关闭时将当前大小保存到设置。

    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

并在加载时应用您在设置中保存的大小

    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
于 2012-10-05T17:41:32.170 回答
1

这是我在网上找到的一个解决方案,似乎对我来说效果很好。

前面提到的一些解决方案并没有像预期的那样对我有用。根据我的表单在关闭时的位置,当我再次加载它时,表单不会重新定位回那个确切的位置。

该解决方案似乎还通过考虑其他一些因素来解决问题:

您需要在 Project Properties -> settings: WindowLocation 和 WindowSize 下设置这两个设置,如下所示:

在此处输入图像描述

然后创建以下函数:

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

接下来,您需要向表单的加载和关闭事件添加代码,如下所示:

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

我希望这会有所帮助。

于 2020-02-02T19:39:34.437 回答
0

您也可以使用 VB.NET IDE 本身提供的 UI 来执行此操作。在表单的属性窗格中,查看名为“(应用程序设置)”的项目,然后查看“属性绑定”。您可以将表单的几乎每个属性(包括大小和位置)绑定到该应用程序的设置值。

于 2008-10-22T14:11:19.680 回答
0

事实证明,我找到了一种方法来使用System.IO.IsolatedStorage

于 2008-10-22T18:15:31.713 回答