【发布时间】:2011-03-13 23:06:38
【问题描述】:
我只是想知道是否可以将 Windows 窗体停靠在用户屏幕的顶部?我一直在尝试通过手动将表单的位置设置为我想要的坐标来做到这一点。但是,使用这种方法,用户可以通过拖动来改变表单的位置。我想让窗体停靠在屏幕的上部,因为这个窗口窗体将作为我正在制作的项目的菜单。
非常感谢。 :)
【问题讨论】:
标签: c# winforms window dock form-control
我只是想知道是否可以将 Windows 窗体停靠在用户屏幕的顶部?我一直在尝试通过手动将表单的位置设置为我想要的坐标来做到这一点。但是,使用这种方法,用户可以通过拖动来改变表单的位置。我想让窗体停靠在屏幕的上部,因为这个窗口窗体将作为我正在制作的项目的菜单。
非常感谢。 :)
【问题讨论】:
标签: c# winforms window dock form-control
我会考虑将Control.Dock 属性与DockStyle 枚举值之一一起使用。
您可能还需要使用Layout,以便您可以根据所选的DockStyle 以不同方式布局表单控件。
在我看来,您需要考虑Control.Location 属性,以便了解将表单与哪个DockStyle 值对接。
编辑#1
您的 Windows 窗体有一个 Dock 属性,因为它继承自 Control。
让我们考虑以下几点:
每当您的表单靠近屏幕右侧或 MDI 容器右侧时,您都希望停靠在右侧,对吗? (这里有点文字游戏...... =P)所以,你必须订阅Control.LocationChanged事件。
private void myForm_LocationChanged(object sender, EventArgs e) {
if (this.Location.X > 900) then
this.Dock = DockStyle.Right;
else if (this.Location.X < 150) then
this.Dock = DockStyle.Left;
else if (this.Location.Y > 600) then
this.Dock = DockStyle.Bottom;
else if (this.Location.Y < 150) then
this.Dock = DockStyle.Top;
else
this.Dock = DockStyle.None;
}
确实,您应该使用当前的桌面分辨率,并根据它计算您希望停靠发生的位置,而不是恒定值。
***免责声明:****此代码按原样提供,未经测试。该算法有望在您需要时引导您完成对接过程。可应要求提供进一步的帮助。* =)
似乎Form.DesktopLocation 属性对于您的主窗口(例如您的 MDI 容器)来说是更合适的工具。至于其他窗口,我会使用看起来像提供的代码示例的东西。
这有帮助吗?
编辑#2
如果您想防止 Form 重叠,也许 Control.BringToFront() 方法可以在您调用 Control.Show() 方法之前或之后执行此操作,具体取决于最适合您的方法。
【讨论】:
DesktopLocation 属性,即用于将整个窗口停靠在桌面上。此外,我建议在 OP 明确他的想法之后,这可能是一个更好的工作工具。请相应地修改您的评论。
所以经过一些调整后,我终于能够让这段代码工作了。
this.DesktopLocation = new Point((Screen.PrimaryScreen.Bounds.Width / 2 - 420), 0);
我将该行放在 InitializeComponent() 下方,它将我的表单以任何分辨率值停靠在屏幕的中心。
【讨论】:
通过将表单的FormBorderStyle 设置为None,您可以将拖动手柄从用户身上移开,这样他们就无法通过鼠标移动它。
然后你只需要把它放在你想要的地方。
如果你真的想去掉用户选项,你也可以将ShowInTaskbar属性设置为false
【讨论】: