【问题标题】:How to dock a windows form in C#?如何在 C# 中停靠 Windows 窗体?
【发布时间】:2011-03-13 23:06:38
【问题描述】:

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

非常感谢。 :)

【问题讨论】:

    标签: c# winforms window dock form-control


    【解决方案1】:

    我会考虑将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() 方法之前或之后执行此操作,具体取决于最适合您的方法。

    【讨论】:

    • 您好,感谢您的回复。我对使用 Visual Studio 2008 的广泛功能有点陌生,我完全不知道如何使用 Control.Dock 属性。你能给我一些关于如何使用这些属性的例子吗?谢谢:)
    • 那是为了将控件停靠在表单中,而不是停靠整个表单。
    • @Jouke Van Der Maas:我猜你没有阅读我所有的答案。我提到了DesktopLocation 属性,即用于将整个窗口停靠在桌面上。此外,我建议在 OP 明确他的想法之后,这可能是一个更好的工作工具。请相应地修改您的评论。
    • @Will Marcouiller 你一定已经编辑过了,我现在将删除我的反对票。没关系,除非您再次编辑,否则我不能。
    • @Jouke Van Der Maas:如果您愿意,我为您编辑了答案以删除您的反对票。但是,请查看您的评论年龄与我的编辑年龄的比较。在您发表评论之前,我已经编辑了 4 小时。不管怎样,最重要的是我们现在都同意我的问题可能会有所帮助。
    【解决方案2】:

    所以经过一些调整后,我终于能够让这段代码工作了。

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-06-17
        • 2013-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多