C# WinForms窗体非控件的拖放事件 我想做的事。
我正在搜索System.Windows.Forms.Form类是否存在拖放事件,但运气不好 我想知道是否有一个优化的方法来做到这一点 我到目前为止所做的一切。 我一直在做以下事情: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
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设置一个值,所以你是对的!这是一个很好的机会,为你学习一些额外的声誉,我希望你也这样做!再见。