我正在尝试将自定义对话框的位置保存到用户注册表,这样当他们重新加载相同的对话框时,它会显示在他们移动的相同位置或将其调整为之前的大小。 我正在保存窗口X位置Y位置宽度和高度。除了对话框最小化时,一切正常。如果对话框最小化并且用户右键单击任务栏上的对话框表示(Windows 7),则可以单击“关闭此窗口”。奇怪的是,数字-32030作为X和Y位置保存在注册表中,但宽度和高度得到正确保存。知道这个数字来自何处以及在这种情况下该怎么做thx
答案 0 :(得分:6)
保存窗口位置时,您需要这样的内容:
if (this.WindowState == WindowState.Normal)
{
Properties.Settings.Default.Top = Top;
Properties.Settings.Default.Left = Left;
Properties.Settings.Default.Height = Height;
Properties.Settings.Default.Width = Width;
}
else
{
Properties.Settings.Default.Top = RestoreBounds.Top;
Properties.Settings.Default.Left = RestoreBounds.Left;
Properties.Settings.Default.Height = RestoreBounds.Height;
Properties.Settings.Default.Width = RestoreBounds.Width;
// Check for WindowState.Maximized or WindowState.Minimized if you
// need to do something different for each case (e.g. store if application
// was Maximized
}
重要的位是窗口最大化或最小化时所需的RestoreBounds
。代码可能会被重构以使其更有效,但你明白了。
答案 1 :(得分:3)
我猜你在窗户关闭时正在更新窗口位置?如果是这种情况,有几种解决方案。
1)将窗口位置保存在不同的事件上,例如调整窗口大小或移动窗口时。 2)在保存X和Y位置之前检查窗口是否最小化。
示例:
switch (this.WindowState)
{
case WindowState.Maximized:
// don't update the X,Y
break;
case WindowState.Minimized:
// don't update the X,Y
break;
case WindowState.Normal:
// DO update the X,Y
break;
}