C# WinForms窗体非控件的拖放事件 我想做的事。

C# WinForms窗体非控件的拖放事件 我想做的事。,c#,forms,winforms,drag-and-drop,eventhandler,C#,Forms,Winforms,Drag And Drop,Eventhandler,我正在搜索System.Windows.Forms.Form类是否存在拖放事件,但运气不好 我想知道是否有一个优化的方法来做到这一点 我到目前为止所做的一切。 我一直在做以下事情: private Rectangle WinBar { get { return new Rectangle(Location.X, Location.Y, Width, 31); } } private void

我正在搜索System.Windows.Forms.Form类是否存在拖放事件,但运气不好

我想知道是否有一个优化的方法来做到这一点

我到目前为止所做的一切。 我一直在做以下事情:

    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语句为true,我将调用EventHandler

我的主要问题 但是,目前,我无法理解这一点,原因如下:

如果我将窗体移动到屏幕左上角,则会出现负值。我想这不是一个问题,但我不知道为什么e.Location不等于0,如果我把形式放在精确的角上。 当我的鼠标在WinForm栏上时,什么也不显示,但是如果我将鼠标向左移动30像素,向下移动50像素,控制台就会发疯。 为什么这种情况下没有本机EventHandler? 为什么我使用31像素作为WinBar高度 我已经检查了当FormBorderStyle属性设置为FormBorderStyle.FixedSingle或Fixed3D或FixedSingle或Size时WinForms是否为31像素,如下图所示:

证据是在MSPaint上选择的大小

但我不使用如何测量它,例如FixedToolWindow或SizeableToolWindow。也许我应该使用三元条件

因此,有一些不确定的事情,我不知道这是否是更好的方法。所以,任何帮助都将是伟大的


提前谢谢

如果我没弄错的话,你是在试图感知整个表单在屏幕上的移动,对吗

如果是,请使用表单的LocationChanged事件并检查表单的Location属性以查看您的位置

编辑以添加示例:

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;
        }
    }
}

好吧,我必须告诉你,这个事件并不存在。。。无论如何谢谢你!我不明白你的意思,它肯定存在!看这里:你完全理解我的问题。但是给定的资源是针对AllowDrop设置为true的控件的。在我的测试中,如果窗体将allow drop设置为true或false,则没有任何区别。。。我想我们在谈论不同的事情?我在表单中使用了一个事件处理程序,只是为了说明这一点。对不起,我们讨论的是同一件事。但我的错误是,我相信LocationChanged只能用于控制,但这是不可能的,因为表单是从中继承而来的。那是因为IntelisSense没有帮我,因为我试图在静态方法中为LocationChanged设置一个值,所以你是对的!这是一个很好的机会,为你学习一些额外的声誉,我希望你也这样做!再见。