使一个无边界的形式可以移动?

当鼠标按下窗体时,是否有一种方法使窗体没有边框(FormBorderStyle设置为“None”),就像有边框一样?



慕斯王
浏览 340回答 3
3回答

jeck猫

让我们不要让事情变得比他们所需要的更困难。我遇到了这么多代码片段,它们允许您拖动窗体(或其他控件)。他们中的许多人都有自己的缺点/副作用。尤其是那些让Windows认为窗体上的控件就是实际窗体的情况下。话虽如此,这是我的片段。我一直在用它。我还想指出的是,您不应该像其他人一样使用它,因为它会导致表单在某些情况下闪烁。在某些情况下也是如此。使用此更新,我没有任何闪烁的问题:private bool mouseDown;private Point lastLocation;     private void Form1_MouseDown(object sender, MouseEventArgs e)     {         mouseDown = true;         lastLocation = e.Location;     }     private void Form1_MouseMove(object sender, MouseEventArgs e)     {         if(mouseDown)         {             this.Location = new Point(                 (this.Location.X - lastLocation.X) + e.X, (this.Location.Y - lastLocation.Y) + e.Y);             this.Update();         }     }     private void Form1_MouseUp(object sender, MouseEventArgs e)     {         mouseDown = false;     }

潇潇雨雨

另一种更简单的方法来做同样的事情。public partial class Form1 : Form{     public Form1()     {         InitializeComponent();         // set this.FormBorderStyle to None here if needed         // if set to none, make sure you have a way to close the form!     }     protected override void WndProc(ref Message m)     {         base.WndProc(ref m);         if (m.Msg == WM_NCHITTEST)             m.Result = (IntPtr)(HT_CAPTION);     }     private const int WM_NCHITTEST = 0x84;     private const int HT_CLIENT = 0x1;     private const int HT_CAPTION = 0x2;}
打开App,查看更多内容
随时随地看视频慕课网APP