拖拽WinForms表单不能控制的丢弃事件

时间:2017-09-04 01:45:42

标签: 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 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属性设置为FormBorderStyleFormBorderStyle.FixedSingleFixed3DFixedSingle为31像素时检查Sizable这张图片告诉我们:

evidence

证据取决于 MSPaint 的选择大小。

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

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

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你试图感觉整个表格何时在屏幕上移动,对吧?

如果是这样,请使用Form的LocationChanged事件并检查Form的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;
        }
    }
}