【问题标题】:Drag & drop event for WinForms Form not ControlWinForms Form not Control 的拖放事件
【发布时间】:2017-09-04 01:45:41
【问题描述】:

我想要做什么。

我正在搜索是否存在 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 高度

FormBorderStyle 属性设置为FormBorderStyle.FixedSingleFixed3DFixedSingleSizable 时,我已检查WinForms 为31 像素,如下图所示:

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

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


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

提前致谢!

【问题讨论】:

    标签: c# forms winforms drag-and-drop eventhandler


    【解决方案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;
            }
        }
    }
    

    【讨论】:

    • 好吧,我不得不告诉你,这个活动不存在......无论如何,谢谢!
    • 我不明白你的意思,它肯定存在!见这里:msdn.microsoft.com/EN-US/library/e0xc63zd(v=VS.110,d=hv.2).aspx
    • 你完全理解我的问题。但是给定的资源是用于将 AllowDrop 设置为 true 的控件。
    • 在我的测试中,如果表单ahs允许放置设置为“true”或“false”并没有任何区别......我认为我们在这里谈论不同的事情?我为表单使用了一个事件处理程序,只是为了说明这一点。
    • 抱歉,我们说的是同一件事。但我的错误是我认为 LocationChanged 仅可用于 Control,但这不可能,因为 Form 是从它继承而来的。那是因为 Intelisense 没有帮助我,因为我试图在静态方法中为 LocationChanged 设置一个值,所以你是对的!这是你学习一些额外声誉的好机会,我希望你也这样做!再见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2015-03-15
    相关资源
    最近更新 更多