2010-07-09 138 views
6

我只是想知道是否有可能停靠在用户屏幕顶部的窗体?我一直在试图通过手动将我的表单的位置设置为我想要的坐标来完成此操作。但是,使用这种方法可以让用户通过拖动来改变表单的位置。我想将窗体停靠在屏幕的上部,因为此窗体将作为我正在制作的项目的菜单服务器。如何在C#中停靠窗体?

非常感谢。 :)

回答

1

所以经过一些调整,我终于能够得到这个代码的工作。

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

我把该行的InitializeComponent()和它下面的对接形式,我用什么分辨率值在屏幕的中央。

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

如果你想防止窗体的重叠,也许Control.BringToFront()方法可能之前或你的电话到Control.Show()方法后做,这取决于什么最适合你。

+0

您好,感谢您的答复。我对使用Visual Studio 2008的扩展功能有点新,我完全不知道如何使用Control.Dock属性。你可以给我一些关于如何使用这些属性的例子吗?谢谢:) – Smiley 2010-07-09 16:22:36

+0

这是为了在窗体内停靠控件,而不是停靠整个窗体。 – 2010-07-09 20:59:16

+0

@Jouke Van Der Maas:我想你没有看完我的答案。我提到'DesktopLocation'属性,也就是说,用于将整个窗口停靠在桌面上。此外,我建议,在OP精简他的想法之后,这可能是更好的工具。请相应修改您的评论。 – 2010-07-09 23:40:10

0

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

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

如果你真的想带走用户的选项,你还可以设置ShowInTaskbar属性设置为false