自定义表单按边框调整大小

时间:2014-01-24 10:52:45

标签: c# winforms forms resize

我有一个没有边框和标题栏的自定义表单。我使用面板(宽度= 1px)来模拟边框。所有工作都很棒,除了左边和上边框。当我尝试减小表单的大小(通过将其拖动到右侧)时,它的工作正常但是当form == this.MinimumSize的大小时。它开始向右移动。我只想改变尺寸,随时移动...... 这是我的leftBorder代码。我如何修改它只改变尺寸?

    private void borderW_MouseDown(object sender, MouseEventArgs e)
    {
        Active = true;

    }


    private void borderW_MouseMove(object sender, MouseEventArgs e)
    {
        if (Active)
        {
            if (e.X < 0)
            {
                this.Location = new Point(this.Left + e.X, this.Top);
                this.Size = new Size(this.Width - e.X, this.Height);
            }
            else
            {
                this.Size = new Size(this.Width - e.X, this.Height);
                this.Location = new Point(this.Left + e.X, this.Top);
            }
        }
    }

    private void borderW_MouseUp(object sender, MouseEventArgs e)
    {
        Active = false;
    }

1 个答案:

答案 0 :(得分:2)

将此功能粘贴到表单中。它是一个覆盖,阻止表单的移动。

但是,您必须使其符合条件,只有当您的表单左侧与form.left + form.width(从我的问题中理解的内容)相同时才会使其处于活动状态。

protected override void WndProc( ref Message m )
{
const int WM_NCLBUTTONDOWN = 161;
const int WM_SYSCOMMAND = 274;
const int HTCAPTION = 2;
const int SC_MOVE = 61456;
if ( (m.Msg == WM_SYSCOMMAND) && (m.WParam.ToInt32() == SC_MOVE) )
return;
if ( (m.Msg == WM_NCLBUTTONDOWN) && (m.WParam.ToInt32() == HTCAPTION)
)
return;
base.WndProc( ref m );
}