调整

时间:2017-05-17 09:19:48

标签: 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 = 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);
        }
}

当我单击右键时,它会冻结,因为MaximumSize是常量,因此我无法调整表单的大小。 e.cancel如果可行则会很棒但是我不能使用它。

我能够使用全局事件捕获鼠标事件,表单事件不会很奇怪。

我有它的工作,但只有当窗口的宽度最小时,它才会在鼠标右键上升后达到原始宽度。

这是因为将其设置为默认大小。如何将窗口保持在更改的大小而不将其设置为MaximumSize 0,0?

1 个答案:

答案 0 :(得分:4)

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

  1. 如果您提供移动表单的唯一方式,则无法移动您的表单。

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

  3. 其次,我想提出这很可能是X-Y problem意味着您可能还有其他问题,您没有告诉我们任何问题,您认为您可能通过右键单击移动来解决它,然后您发现按右键单击移动对您不起作用,并且您来到这里询问如何通过右键单击进行操作。为什么不首先描述真正的问题?

    第三,如果您真的想通过右键单击继续移动表单,那么该怎么做。

    首先,您需要检测何时按下鼠标右键。有这样的事件。他们工作。如果他们不为你工作,那就不是做其他奇怪事情的理由了。声明"我无法用鼠标事件捕捉鼠标点击"是完全奇怪的,因为a)这是一个错误的使用术语"捕获&#34 ;;鼠标捕获是一个非常具体的事情,(稍后会详细介绍),所以请不要在其他环境中使用它,并且b)如果你无法完成某些事情,那么这应该是stackoverflow问题的主题 独自 。你不能尝试完全奇怪的事情,因为你做正确事情的尝试失败了。

    因此,一旦您检测到鼠标右键单击工作,则需要设置鼠标捕获。 (查找,搜索" SetCapture"。)这可以保证您可以继续接收鼠标移动事件,最后是鼠标注册事件,即使鼠标已移出您的你在拖动它时形成。