C# 调整大小时单击鼠标右键移动表单

C# 调整大小时单击鼠标右键移动表单,c#,winforms,C#,Winforms,如果右键按下,则在调整窗体大小时,我尝试移动窗体,而不是调整窗体大小 调整事件大小: if (rightMouseDown) { this.SetDesktopLocation(MousePosition.X - this.Width, MousePosition.Y - this.Height); this.MaximumSize = new System.Drawing.Size(this.Width, this.Height); this.MinimumSize =

如果右键按下,则在调整窗体大小时,我尝试移动窗体,而不是调整窗体大小

调整事件大小:

if (rightMouseDown)
{
    this.SetDesktopLocation(MousePosition.X - this.Width, MousePosition.Y - this.Height);
    this.MaximumSize = new System.Drawing.Size(this.Width, this.Height);
    this.MinimumSize = new System.Drawing.Size(this.Width, this.Height);
}
全局鼠标事件:

bool rightMouseDown;
private void HoldMouse(object sender, MouseEventArgs e)
{
        if (e.Button == MouseButtons.Right && e.Clicks != 1)
        {
            rightMouseDown = true;
        }
        else if (e.Button == MouseButtons.Right)
        {
            rightMouseDown = false;
            this.MaximumSize = new System.Drawing.Size(0, 0);
            this.MinimumSize = new System.Drawing.Size(100, 100);
        }
}
当我点击右键时,它会冻结,因为最大大小是恒定的,因此我无法调整窗体的大小。 e、 取消将是可怕的,如果它将工作,但我不能使用它

我能够用全局事件捕获鼠标事件,表单事件并不奇怪

我让它工作了,但只有当窗口的宽度最小,并且在鼠标右键向上移动后,窗口变为原始宽度时,它才会工作。


这是由于将其设置为默认大小。如何在不将窗口设置为MaximumSize 0,0的情况下将其保持在更改后的大小?

首先,我建议您在右键按下时不要移动表单,因为这是非常不标准的,因此可能会被任何试图使用您的应用程序的人视为非常特殊。更具体地说,没有人会尝试使用鼠标右键移动或调整窗体大小,因此:

  • 如果这是你移动表单的唯一方式,那么没有人能够移动你的表单

  • 如果您还提供了其他移动表单的方式,那么为什么还要提供这种方式呢

  • 第二,我想提出的是,这很可能是一个意思,你可能有一些其他的问题,你没有告诉我们,你认为你可以通过右击移动来解决它,然后你发现右击移动不适合你,你来这里是想知道如何通过右键点击开始工作。你为什么不先描述一下真正的问题呢

    第三,如果你真的想通过右键点击来移动你的表单,那不是怎么做的

    首先,您需要检测何时按下鼠标右键。有这样的活动。他们工作。如果他们不为你工作,那就不是做其他奇怪事情的理由。“我不能用鼠标事件捕捉鼠标点击”这句话非常奇怪,因为a)这是对“捕捉”一词的错误使用;鼠标捕获是一件非常具体的事情,(稍后将详细介绍),因此请不要在其他环境中使用鼠标捕获,并且b)如果您无法完成某项任务,那么这应该是stackoverflow问题本身的主题。你不可能尝试完全奇怪的事情,因为你尝试做正确的事情失败了


    因此,一旦您检测到鼠标右键点击工作,那么您需要设置鼠标捕获。(查找它,搜索“SetCapture”。)这就是保证您可以不断接收鼠标移动事件,以及最后一个鼠标向上移动事件的原因,即使鼠标在拖动窗体时已移动到窗体外部。

    首先,我建议您不要在右键按下时移动窗体,因为这是非常不标准的,因此可能会被任何试图使用你的应用程序的人认为是非常特殊的。更具体地说,没有人会尝试使用鼠标右键移动或调整窗体大小,因此:

  • 如果这是你移动表单的唯一方式,那么没有人能够移动你的表单

  • 如果您还提供了其他移动表单的方式,那么为什么还要提供这种方式呢

  • 第二,我想提出的是,这很可能是一个意思,你可能有一些其他的问题,你没有告诉我们,你认为你可以通过右击移动来解决它,然后你发现右击移动不适合你,你来这里是想知道如何通过右键点击开始工作。你为什么不先描述一下真正的问题呢

    第三,如果你真的想通过右键点击来移动你的表单,那不是怎么做的

    首先,您需要检测何时按下鼠标右键。有这样的活动。他们工作。如果他们不为你工作,那就不是做其他奇怪事情的理由。“我不能用鼠标事件捕捉鼠标点击”这句话非常奇怪,因为a)这是对“捕捉”一词的错误使用;鼠标捕获是一件非常具体的事情,(稍后将详细介绍),因此请不要在其他环境中使用鼠标捕获,并且b)如果您无法完成某项任务,那么这应该是stackoverflow问题本身的主题。你不可能尝试完全奇怪的事情,因为你尝试做正确的事情失败了


    因此,一旦您检测到鼠标右键点击工作,那么您需要设置鼠标捕获。(查找它,搜索“SetCapture”。)这就是保证您可以不断接收鼠标移动事件,以及最后一个鼠标向上移动事件的原因,即使您拖动鼠标时鼠标已移动到窗体外部。

    我使用WinForms的MetroFramework。也许这就是我无法捕捉鼠标右键事件的原因。但是我应该找到另一种方法,我就快到了。”在我调整大小时移动表单而不是调整它的大小“真的吗?@MikeNakis是的,真的,只有当你按住鼠标右键时,它才会这样做,这样用户就不必去上栏用左键单击它,然后返回右下角。我不是要求用户反馈。我使用WinForms的MetroFramework。也许这就是我无法捕捉鼠标右键事件的原因。但是我应该找到另一种方法,我就快到了。”在我调整大小时,移动表单而不是调整它的大小“真的吗?@MikeNakis是的,真的,只有当你按住鼠标右键时,它才会这样做,这样用户就不必去上栏用左键单击它,然后返回底部