C#, WinForms - 在不移动工作区的情况下更改 FormBorderStyle

本文关键字:情况下 FormBorderStyle 工作区 移动 WinForms | 更新日期: 2023-09-27 17:57:00

我有一个小的工具窗口,通常将FormBorderStyle设置为FixedDialog,没有标题文本,也没有控制框,因此它看起来像一个具有凸起的3D效果的无边框表单。

当用户将鼠标移到工具窗口上时,它将从这种无边框的固定对话框模式更改为带有标题文本和控制框的大小工具窗口。

结果是工作区移动。

以下代码有效,但我不想对上/左增量进行硬编码,我认为它根据用户拥有的主题/操作系统而有所不同

    void Reposition()
    {
        var topDelta = 12; // this number is wrong, i have not found the right number for aero yet
        var leftDelta = 3;
        if (this.Bounds.Contains(MousePosition))
        {
            if (this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.SizableToolWindow)
            {
                this.Location = new Point(this.Location.X - leftDelta, this.Location.Y - topDelta);
                this.ControlBox = true;
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow;
            }
        }
        else
        {
            if (this.FormBorderStyle == System.Windows.Forms.FormBorderStyle.SizableToolWindow)
            {
                this.Location = new Point(this.Location.X + leftDelta, this.Location.Y + topDelta);
                this.ControlBox = false;
                this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
            }
        }
    }

C#, WinForms - 在不移动工作区的情况下更改 FormBorderStyle

查看SystemParameters类。您将在那里找到在代码中硬编码的值。