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
。
我的主要问题
但是,由于以下原因,目前我无法解决这个问题:
- 如果我将
Form
移动到屏幕的左上角 负值 出现。我想这不是问题,但我不知道为什么 e.Location
不等于 (0, 0)
如果我把表格放在确切的角落。
- 当我的鼠标悬停在 WinForm 栏上时,什么也没有出现,但是如果我将鼠标移到下方(比如向左移动 30 像素,向底部移动 50 像素),控制台就会运行疯了。
- 为什么这种情况下没有原生
EventHandler
?
为什么我使用 31 像素作为 WinBar 高度
我检查过 WinForms
当 FormBorderStyle
属性 设置为 FormBorderStyle.FixedSingle
or Fixed3D
or FixedSingle
or Sizable
是 31 像素,如图所示:
证据是 MSPaint 上选择的大小。
但我没有使用如何测量它,例如 FixedToolWindow
或 SizableToolWindow
。 (也许我应该使用三元条件)
所以,有几个不确定的事情,我不知道这是否是更好的方法。所以,任何帮助都会很棒!
提前致谢!
如果我没理解错的话,你是想感知整个表单何时在屏幕上移动,对吧?
如果是这样,请使用表单的 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;
}
}
}
我想做什么。
我正在搜索是否存在 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
。
我的主要问题
但是,由于以下原因,目前我无法解决这个问题:
- 如果我将
Form
移动到屏幕的左上角 负值 出现。我想这不是问题,但我不知道为什么e.Location
不等于(0, 0)
如果我把表格放在确切的角落。 - 当我的鼠标悬停在 WinForm 栏上时,什么也没有出现,但是如果我将鼠标移到下方(比如向左移动 30 像素,向底部移动 50 像素),控制台就会运行疯了。
- 为什么这种情况下没有原生
EventHandler
?
为什么我使用 31 像素作为 WinBar 高度
我检查过 WinForms
当 FormBorderStyle
属性 设置为 FormBorderStyle.FixedSingle
or Fixed3D
or FixedSingle
or Sizable
是 31 像素,如图所示:
证据是 MSPaint 上选择的大小。
但我没有使用如何测量它,例如 FixedToolWindow
或 SizableToolWindow
。 (也许我应该使用三元条件)
所以,有几个不确定的事情,我不知道这是否是更好的方法。所以,任何帮助都会很棒!
提前致谢!
如果我没理解错的话,你是想感知整个表单何时在屏幕上移动,对吧?
如果是这样,请使用表单的 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;
}
}
}