无边框和可resize的表单(C#)

我在网上发现了一些代码并将其复制,到目前为止,我已经能够将一切都搞定了,除了一件事,我想让窗体(窗口)完全无边框。

我正在使用Visual Studio 2013,这个问题只是使窗体(窗口)无边框所需的代码。 问题是,当你使它无边界时,它不再可resize,但是当它有边框时,它可以resize。

我知道使用一些代码可以覆盖并实现两者。 这是我到目前为止(从其他网站复制)。 这摆脱了具有程序名称的顶部栏,通过单击并拖动表单使表单可移动,并且它可以resize。

唯一的问题是边界仍然存在。 我可以添加什么代码,这样边框就会消失? 我想保留当前的代码,因为它提供了我需要的几个function。

顺便说一句,我查看了一些类似主题的旧问题,但没有找到我需要的正确代码。

对于指导我到另一个线程的mod:我在那里尝试了代码,虽然这是一个类似的问题,但这并不是我想要实现的。 当我尝试该代码时,我无法单击窗体(窗口)上的任何位置来移动它。 另外,它右下角有一个可resize的角落,这不是我想要的。 我需要在所有角落和侧面resize,就像普通窗口一样。

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace BoxHider { public partial class Form1 : Form { public Form1() { InitializeComponent(); //Next line doesn't seem to be working this.FormBorderStyle = FormBorderStyle.None; } const int WM_NCHITTEST = 0x0084; const int HTCLIENT = 1; const int HTCAPTION = 2; protected override void WndProc(ref Message m) { base.WndProc(ref m); switch (m.Msg) { case WM_NCHITTEST: if (m.Result == (IntPtr)HTCLIENT) { m.Result = (IntPtr)HTCAPTION; } break; } } protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.Style |= 0x40000; return cp; } } } } 

我需要的

试试这个:

 public Form1() { InitializeComponent(); this.FormBorderStyle = FormBorderStyle.None; } protected override void WndProc(ref Message m) { const int RESIZE_HANDLE_SIZE = 10; switch (m.Msg) { case 0x0084/*NCHITTEST*/ : base.WndProc(ref m); if ((int)m.Result == 0x01/*HTCLIENT*/) { Point screenPoint = new Point(m.LParam.ToInt32()); Point clientPoint = this.PointToClient(screenPoint); if (clientPoint.Y <= RESIZE_HANDLE_SIZE) { if (clientPoint.X <= RESIZE_HANDLE_SIZE) m.Result = (IntPtr) 13/*HTTOPLEFT*/ ; else if (clientPoint.X < (Size.Width - RESIZE_HANDLE_SIZE)) m.Result = (IntPtr) 12/*HTTOP*/ ; else m.Result = (IntPtr) 14/*HTTOPRIGHT*/ ; } else if (clientPoint.Y <= (Size.Height - RESIZE_HANDLE_SIZE)) { if (clientPoint.X <= RESIZE_HANDLE_SIZE) m.Result = (IntPtr) 10/*HTLEFT*/ ; else if (clientPoint.X < (Size.Width - RESIZE_HANDLE_SIZE)) m.Result = (IntPtr) 2/*HTCAPTION*/ ; else m.Result = (IntPtr) 11/*HTRIGHT*/ ; } else { if (clientPoint.X <= RESIZE_HANDLE_SIZE) m.Result = (IntPtr) 16/*HTBOTTOMLEFT*/ ; else if (clientPoint.X < (Size.Width - RESIZE_HANDLE_SIZE)) m.Result = (IntPtr) 15/*HTBOTTOM*/ ; else m.Result = (IntPtr)17/*HTBOTTOMRIGHT*/ ; } } return; } base.WndProc(ref m); } protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; cp.Style |= 0x20000; // <--- use 0x20000 return cp; } } 

信息来源:

您应该在加载表单后设置边框样式:

 protected override void OnLoad(EventArgs e) { base.OnLoad(e); this.FormBorderStyle = FormBorderStyle.None; }