保存表单桌面位置和大小

时间:2012-11-26 07:41:45

标签: c# winforms

我正在使用winforms,我想在用户更改时保存表单的位置和大小。我找到了一些有用的代码,并将其放在关闭事件和表单加载事件的表单中,以分别保存和加载大小和位置。

但是,当用户在未关闭程序的情况下直接关闭PC时,不会保存更改的大小和位置。

因此,我在更改的大小和位置更改事件中使用了相同的代码,但它不起作用,并且程序重新启动时不会更改大小和位置。

private void frmScopeStatus_SizeChanged(object sender, EventArgs e)
{
    Application.UserAppDataRegistry.SetValue("WindowState", this.WindowState);
    Application.UserAppDataRegistry.SetValue("WindowSizeH", this.Size.Height);
    Application.UserAppDataRegistry.SetValue("WindowSizeW", this.Size.Width);
    Application.UserAppDataRegistry.SetValue("LocationX", this.DesktopLocation.X);
    Application.UserAppDataRegistry.SetValue("LocationY", this.DesktopLocation.Y);
}

 private void frmScopeStatus_LocationChanged(object sender, EventArgs e)
{
    Application.UserAppDataRegistry.SetValue("WindowState", this.WindowState);
    Application.UserAppDataRegistry.SetValue("WindowSizeH", this.Size.Height);
    Application.UserAppDataRegistry.SetValue("WindowSizeW", this.Size.Width);
    Application.UserAppDataRegistry.SetValue("LocationX", this.DesktopLocation.X);
    Application.UserAppDataRegistry.SetValue("LocationY", this.DesktopLocation.Y);
}

1 个答案:

答案 0 :(得分:3)

您可以提供User范围的应用程序设置数据绑定来存储这些值。

  • 在设计师中打开表单
  • 转到表单属性Data > (Application Settins) group
  • Location(和ClientSize)属性添加数据库(范围用户)
  • FormClosing事件保存已更改的属性Properties.Settings.Default.Save();

这将为您的应用程序文件的每个用户(%SYSTEMDRIVE%/Users/{username}/AppData/Local/CompanyName/AppName)创建用户设置,这将在应用程序启动时应用:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <userSettings>
        <AppName.Properties.Settings>
            <setting name="FormLocation" serializeAs="String">
                <value>345, 234</value>
            </setting>
            <setting name="FormSize" serializeAs="String">
                <value>458, 555</value>
            </setting>
        </AppName.Properties.Settings>
    </userSettings>
</configuration>

BTW 我认为FormClosed事件更适合保存应用程序设置。