基本上,当用户调整应用程序窗口的大小时,我希望再次打开应用程序时应用程序的大小保持不变.

起初我想处理SizeChanged事件并节省高度和宽度,但我认为一定有更简单的解决方案.

问题很简单,但我找不到简单的解决办法.

推荐答案

将值保存在user.config文件中.

你需要在设置文件中创建这个值——它应该在Properties文件夹中.创造五个价值观:

  • double型中的Top
  • double型中的Left
  • double型中的Height
  • double型中的Width
  • boolMaximized-用于保持窗口是否最大化.如果您想存储更多信息,则需要不同的类型或 struct .

将前两个参数初始化为0,将后两个参数初始化为应用程序的默认大小,将最后一个参数初始化为false.

在资源初始化事件处理程序上创建一个窗口,并添加以下内容:

this.Top = Properties.Settings.Default.Top;
this.Left = Properties.Settings.Default.Left;
this.Height = Properties.Settings.Default.Height;
this.Width = Properties.Settings.Default.Width;
// Very quick and dirty - but it does the job
if (Properties.Settings.Default.Maximized)
{
    WindowState = WindowState.Maximized;
}

NOTE:设置的窗口放置需要在窗口(而不是构造函数)的源初始化事件中进行,否则,如果您在第二个监视器上最大化窗口,它将始终在主监视器上最大化地重新启动,您将无法访问它.

创建窗口关闭事件处理程序并添加以下内容:

if (WindowState == WindowState.Maximized)
{
    // Use the RestoreBounds as the current values will be 0, 0 and the size of the screen
    Properties.Settings.Default.Top = RestoreBounds.Top;
    Properties.Settings.Default.Left = RestoreBounds.Left;
    Properties.Settings.Default.Height = RestoreBounds.Height;
    Properties.Settings.Default.Width = RestoreBounds.Width;
    Properties.Settings.Default.Maximized = true;
}
else
{
    Properties.Settings.Default.Top = this.Top;
    Properties.Settings.Default.Left = this.Left;
    Properties.Settings.Default.Height = this.Height;
    Properties.Settings.Default.Width = this.Width;
    Properties.Settings.Default.Maximized = false;
}

Properties.Settings.Default.Save();

如果在应用程序关闭时,用户通过断开屏幕或更改屏幕分辨率来缩小显示区域,则此操作将失败,因此在应用这些值之前,您应该添加一项判断,确保所需的位置和大小仍然有效.

.net相关问答推荐

如何使用.NET8MapIdentityApi设置OpenApi操作ID

从容器化客户端应用程序连接到 OPC-UA 服务器

在 Inno Setup 中判断给定服务的依赖服务

在 .NET 中使用 AES 解密时缺少后半字节

为什么 .net 对字符串使用 UTF16 编码,但默认使用 UTF-8 来保存文件?

在 ASP.NET MVC 中我可以在哪里放置自定义类?

.NET 中的线程安全集合

Owin Twitter登录-根据验证程序远程证书无效

比较 C# 中的字符串和对象

如何在 C# 中打开 Excel 文件?

使用 C# 在 .NET 4.0 中 Task.Run 的替代方法是什么?

迭代器和枚举器的区别

关于 Enumerable.Range 与传统 for 循环的 foreach 的思考

使用 XmlSerializer 将空 xml 属性值反序列化为可为空的 int 属性

获取 .NET 程序集的 AssemblyInformationalVersion 值?

如何在 C# 中以编程方式安装 Windows 服务?

Moq - 不可覆盖的成员不能用于设置/验证表达式

如何使用 Entity Framework Code First CTP 5 存储图像?

在 .NET 中获取默认打印机的最佳方法是什么

Microsoft.Bcl.Build NuGet 包有什么作用?