如何在C#中停靠窗体?

时间:2010-07-09 15:55:56

标签: c# winforms window dock form-control

我只是想知道是否可以将窗体停靠在用户屏幕的顶部?我一直试图通过手动将表单的位置设置为我想要的坐标来做到这一点。但是,使用此方法,用户只需拖动即可更改表单的位置。我希望将表单停靠在屏幕的上半部分,因为这个窗口表单将作为我正在制作的项目的菜单服务。

非常感谢。 :)

3 个答案:

答案 0 :(得分: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;
    }
    
  2. 实际上,您应该使用当前的桌面分辨率而不是常量值,并计算您希望进行对接的比率。

    ***免责声明:****此代码按原样提供,尚未经过测试。希望这个算法足以指导您完成对接过程。可根据要求提供进一步的帮助。* =)

    Form.DesktopLocation属性似乎是主窗口作业的更好工具,例如你的MDI容器。至于其他窗口,我会选择看起来像提供的代码示例。

    这有帮助吗?

    编辑#2

    如果您想阻止表单重叠,可能Control.BringToFront()方法可以在您调用Control.Show()方法之前或之后执行,具体取决于最适合您的方法。

答案 1 :(得分:1)

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

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

我将该行放在InitializeComponent()下面,它将我的表单停靠在屏幕中心,无论分辨率值是多少。

答案 2 :(得分:0)

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

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

如果您真的想要删除用户选项,您还可以将ShowInTaskbar属性设置为false