c# - 按住鼠标右键 move 无边界 Winform,可能使用 native 方法

标签 c# winforms move right-click borderless

我有一种情况,我想通过在客户区按住鼠标右键来 move 窗体;正如我所说的那样,它的形式是无边界的。

我想“本地” move 它(如果可能的话,否则其他答案也可以)。我的意思是当您在标题栏上按住鼠标左键时它的行为方式(使用鼠标 move 和类似的东西我得到了很多奇怪的行为,但也许只有我这样)。

我已经阅读了很多东西,这篇文章看起来很有帮助

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b9985b19-cab5-4fba-9dc5-f323d0d37e2f/

我尝试了各种方式来使用它并观看了 http://msdn.microsoft.com/en-us/library/ff468877%28v=VS.85%29.aspx为了找到其他有用的东西,我想到了 WM_NCRBUTTONDOWN,但是 wndproc 没有检测到它,可能是因为它是由表单处理的?

感谢任何建议,谢谢

弗朗切斯科

最佳答案

public partial class DragForm : Form
{
    // Offset from upper left of form where mouse grabbed
    private Size? _mouseGrabOffset;

    public DragForm()
    {
        InitializeComponent();
    }

    protected override void OnMouseDown(MouseEventArgs e)
    {
        if( e.Button == System.Windows.Forms.MouseButtons.Right )
            _mouseGrabOffset = new Size(e.Location);

        base.OnMouseDown(e);
    }

    protected override void OnMouseUp(MouseEventArgs e)
    {
        _mouseGrabOffset = null;

        base.OnMouseUp(e);
    }

    protected override void OnMouseMove(MouseEventArgs e)
    {
        if (_mouseGrabOffset.HasValue)
        {
            this.Location = Cursor.Position - _mouseGrabOffset.Value;
        }

        base.OnMouseMove(e);
    }
}

关于c# - 按住鼠标右键 move 无边界 Winform,可能使用 native 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5827208/

相关文章:

c# - 错误 CS0433 : The type 'JsonValue' exists in both 'System.Json, Version=2.0.5.0' and 'Xamarin.Auth' (CS0433)

c# - 扩展方法重载

c# - 隐藏某些列时如何调整 rdlc 报告的整体宽度?

C# 折线图如何创建垂直线

c# - 如何从winforms获取wpf窗口实例

c# - linq paging - 获取总行数

c# - 如何获取动态创建的 Storyboard的目标属性?我的代码只返回 null

c++ - 为什么通过引用返回 vector 比通过 move 返回快得多?

command-line - 使用通配符 move 目录

python - Sprite 没有向下 move