Buat borang tanpa sempadan yang boleh diubah saiz dan alih dalam Borang Windows
Dalam Windows Forms, borang tanpa sempadan boleh dibuat dengan mudah dengan menetapkan sifat "FormBorderStyle" kepada "Tiada". Walau bagaimanapun, tindakan lalai ini melumpuhkan keupayaan untuk mengubah saiz borang. Untuk mengatasi had ini, kaedah yang lebih maju diperlukan.
Kod berikut menunjukkan penyelesaian tersuai yang bergerak dan mengubah saiz bentuk tanpa sempadan secara serentak:
<code class="language-csharp">public partial class Form1 : Form { public Form1() { InitializeComponent(); this.FormBorderStyle = FormBorderStyle.None; this.DoubleBuffered = true; this.SetStyle(ControlStyles.ResizeRedraw, true); } private const int cGrip = 16; // 调整大小控制柄大小 private const int cCaption = 32; // 标题栏高度 protected override void OnPaint(PaintEventArgs e) { // 在右下角绘制调整大小控制柄 Rectangle rc = new Rectangle(this.ClientSize.Width - cGrip, this.ClientSize.Height - cGrip, cGrip, cGrip); ControlPaint.DrawSizeGrip(e.Graphics, this.BackColor, rc); // 绘制模拟标题栏 rc = new Rectangle(0, 0, this.ClientSize.Width, cCaption); e.Graphics.FillRectangle(Brushes.DarkBlue, rc); } protected override void WndProc(ref Message m) { if (m.Msg == 0x84) { // 捕获WM_NCHITTEST消息 Point pos = new Point(m.LParam.ToInt32()); pos = this.PointToClient(pos); if (pos.X >= this.ClientSize.Width - cGrip && pos.Y >= this.ClientSize.Height - cGrip) { m.Result = (IntPtr)17; // HTBOTTOMRIGHT return; } } base.WndProc(ref m); } }</code>
Penjelasan tentang cara kod berfungsi:
OnPaint
Kaedah yang diganti akan melukis bar biru di bahagian atas borang untuk mensimulasikan bar tajuk. DrawSizeGrip
melukis pemegang kawalan di penjuru kanan sebelah bawah borang, membenarkan penyeretan untuk mengubah saiz. WndProc
Gantikan kaedah untuk memintas mesej WM_NCHITTEST untuk mengesan kedudukan kursor tetikus. Jika kursor berada dalam bar tajuk atau pemegang kawalan, kod ujian hit yang sesuai dikembalikan. pos.Y
dalam kod hendaklah ditukar kepada pos.X
supaya logik dan pastikan kawasan pemegang ubah saiz di sudut kanan bawah dikesan dengan betul. Atas ialah kandungan terperinci Bagaimana untuk Mencipta Borang Tanpa Sempadan Boleh Resizable dan Alih dalam Borang Windows?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!