6

我只是想知道是否可以将 Windows 窗体停靠在用户屏幕的顶部?我一直在尝试通过手动将表单的位置设置为我想要的坐标来做到这一点。但是,使用这种方法,用户可以通过拖动来改变表单的位置。我想让窗体停靠在屏幕的上部,因为这个窗口窗体将作为我正在制作的项目的菜单。

非常感谢。:)

4

3 回答 3

3

我会考虑将该Control.Dock属性与DockStyle枚举值之一一起使用。

您可能还需要使用Layout,以便您可以根据DockStyle所选内容以不同的方式布局表单的控件。

在我看来,您将需要考虑Control.Location属性,以便您了解DockStyle将表单与哪个值对接。

编辑#1

您的 Windows 窗体有一个Dock属性,因为它继承自Control.

让我们考虑以下内容:

  1. 例如,每当您的表单靠近屏幕右侧或 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()方法之前或之后执行此操作,具体取决于最适合您的方法。

于 2010-07-09T16:06:08.807 回答
1

因此,经过一些调整,我终于能够让这段代码正常工作。

this.DesktopLocation = new Point((Screen.PrimaryScreen.Bounds.Width / 2 - 420), 0);

我将该行放在 InitializeComponent() 下方,它以任何分辨率值将我的表单停靠到屏幕的中心。

于 2010-07-09T16:37:25.567 回答
0

通过将FormBorderStyle表单的 设置为None,您可以将拖动手柄从用户身上移开,这样他们就无法通过鼠标移动它。

然后你只需要把它放在你想要的地方。

如果你真的想去掉 users 选项,你也可以将ShowInTaskbar属性设置为 false

于 2010-07-09T17:09:58.477 回答