繁体   English   中英

WinForms窗体的非控件拖放事件

[英]Drag & drop event for WinForms Form not Control

我正在尝试做的。

我正在搜索是否存在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为true,则将调用EventHandler


我的主要问题

但是,由于以下原因,目前我无法弄清楚:

  • 如果我将Form移到屏幕的左上角, 则会出现负值 我想这不是问题,但是我不知道为什么如果我将Form放在确切的角落(0, 0) e.Location 不等于 (0, 0)
  • 当我的鼠标悬停在WinForm栏上时,什么都没有出现 ,但是如果我将鼠标移到下面(例如,向左30像素,向底部50 px),控制台就会发疯。
  • 为什么在这种情况下没有本地EventHandler

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

我已经检查了WinFormsFormBorderStyle属性设置为FormBorderStyle.FixedSingleFixed3DFixedSingleSizable为31个像素,因为这个形象告诉我们:

证据

证据是在MSPaint上选择的大小。

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


因此,存在一些不确定的事情,我不知道这是否是更好的方法。 因此,任何帮助都会很棒!

提前致谢!

如果我对您的理解正确,那么您正在尝试感知整个表格何时在屏幕上移动,对吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM