WinForms 表单的拖放事件不是控件

Drag & drop event for WinForms Form not Control

我想做什么。

我正在搜索是否存在 System.Windows.Forms.Form class 的拖放事件,但不幸的是...

我想知道是否有优化的方法...


到目前为止我做了什么。

我一直在做以下事情:

    private Rectangle WinBar
    {
        get
        {
            return new Rectangle(Location.X, Location.Y, Width, 31);
        }
    }

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left && WinBar.Contains(e.Location))
            Console.WriteLine("Being dragged!");
    }

我的目的是,如果 IF-statment 为真,我将调用 EventHandler


我的主要问题

但是,由于以下原因,目前我无法解决这个问题:


为什么我使用 31 像素作为 WinBar 高度

我检查过 WinFormsFormBorderStyle 属性 设置为 FormBorderStyle.FixedSingle or Fixed3D or FixedSingle or Sizable 是 31 像素,如图所示:

证据是 MSPaint 上选择的大小。

但我没有使用如何测量它,例如 FixedToolWindowSizableToolWindow。 (也许我应该使用三元条件)


所以,有几个不确定的事情,我不知道这是否是更好的方法。所以,任何帮助都会很棒!

提前致谢!

如果我没理解错的话,你是想感知整个表单何时在屏幕上移动,对吧?

如果是这样,请使用表单的 LocationChanged 事件并检查表单的位置 属性 以查看您所在的位置...

编辑 添加示例:

using System;
using System.Windows.Forms;

namespace WindowsFormsTestMove
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_LocationChanged(object sender, EventArgs e)
        {
            var loc = this.Location;
            this.Text = loc.X + " " + loc.Y;
        }
    }
}