保存并恢复表单位置和大小

10 .net settings configuration winforms

在WinForms 2.0 C#应用程序中,用于在应用程序中保存和恢复表单位置和大小的典型方法是什么?

相关,是否可以在RUNTIME添加新的用户范围应用程序设置?我完全看到如何在设计时添加设置,这不是问题.但是如果我想在运行时创建一个呢?

更多细节:

我的应用程序是现有Visual FoxPro应用程序的转换.我一直在尝试尽可能多地阅读有关应用程序设置,用户设置等的内容,并清楚地了解.Net的做事方式,但仍然有一些我很困惑的事情.

在Fox应用程序中,保存的设置存储在注册表中.我的表单是子类,我有基类代码,自动保存表单位置和大小在表单名称的注册表中.每当我创建一个新表单时,我都不需要做任何特殊的事情来获得这种行为; 它内置于基类中.我的.Net表单也是子类,该部分运行良好.

在.Net中,我得到的印象是我应该使用用户范围设置来处理用户首选项等内容.表单的大小和位置绝对看起来像用户首选项.但是,我看不到任何方法可以自动将这些设置添加到项目中.换句话说,每次我向项目添加一个新表单(并且它们是100个表单)时,我必须记住添加一个用户范围的应用程序设置,并确保给它与表单相同的名称,即" FormMySpecialSizePosition"保持大小和位置.我宁愿不记得那样做.这只是运气吗?或者我是否通过尝试使用用户范围设置完全咆哮错误的树?我是否需要创建自己的XML文件来保存设置,以便我可以做任何我想做的事情(即在运行时添加新设置)?或者是其他东西?

当然这是非常普遍的,有人可以说"正确"的方式来做到这一点.提前致谢!

小智 8

private void Form1_Load( object sender, EventArgs e )
{
    // restore location and size of the form on the desktop
    this.DesktopBounds =
        new Rectangle(Properties.Settings.Default.Location,
    Properties.Settings.Default.Size);
    // restore form's window state
    this.WindowState = ( FormWindowState )Enum.Parse(
        typeof(FormWindowState),
        Properties.Settings.Default.WindowState);
}

private void Form1_FormClosing( object sender, FormClosingEventArgs e )
{
    System.Drawing.Rectangle bounds = this.WindowState != FormWindowState.Normal ? this.RestoreBounds : this.DesktopBounds;
    Properties.Settings.Default.Location = bounds.Location;
    Properties.Settings.Default.Size = bounds.Size;
    Properties.Settings.Default.WindowState =
        Enum.GetName(typeof(FormWindowState), this.WindowState);
    // persist location ,size and window state of the form on the desktop
    Properties.Settings.Default.Save();
}
Run Code Online (Sandbox Code Playgroud)


Sto*_*net 0

您可以创建一个具有常见功能(例如记住位置和大小)的基表单类,并从该基类继承。

public class myForm : Form {
protected override void OnLoad(){
    //load the settings and apply them
    base.OnLoad();
}

protected override void OnClose(){
    //save the settings
    base.OnClose();
}
}
then for the other forms:

public class frmMainScreen : myForm {
// you get the settings for free ;)
}
Run Code Online (Sandbox Code Playgroud)

嗯,类似的事情;)