使用NWSE光标调整事件大小仅表示默认光标

时间:2014-03-14 13:50:47

标签: c# winforms resize cursor

我想检测是否从表单的夹点/东南角开始调整大小。当我在Resize事件中检查光标时,即使我看到一个SizeNWSE光标,它也会检测到一个默认光标。

这是我的代码:

private void Form1_Resize(object sender, EventArgs e)
{
   if (Cursor == Cursors.SizeNWSE)
   {
         // doesn't reach this point although i see a NWSE cursor
   }
}

为什么不检测Cursors.SizeNWSE游标?还有另一种方法可以检测从手柄开始调整大小吗?背景是我想要将表单中的图像调整为拉伸,但是每当从角落开始调整大小时,按比例调整。我有一些图像查看器就是这样做但我已经丢失它并且不记得名字所以我尝试开发自己的名称。 任何提示都受到高度赞赏。

2 个答案:

答案 0 :(得分:3)

您使用了错误的属性,当您开始调整大小时,Form.Cursor属性不会更改。它是Windows,它覆盖了Cursor.Current属性,调整窗口大小的模态循环在Windows本身中实现。这很好用:

protected override void OnResize(EventArgs e) {
    if (Cursor.Current == Cursors.SizeNWSE) {
        Console.WriteLine("lower right corner");
    }
    base.OnResize(e);
}

答案 1 :(得分:0)

表单的Cursor属性在表单的非客户区域不受影响。
我建议确定表单的HeightWidth属性是否都已更改 请在表格的类中试用此代码:

private int oldWidth;
private int oldHeight;
private bool areBothChanged;

protected override void OnResizeBegin(EventArgs e)
{
    oldWidth = Width;
    oldHeight = Height;
    areBothChanged = false;
    base.OnResizeBegin(e);
}

protected override void OnResize(EventArgs e)
{
    areBothChanged |= Width != oldWidth && Height != oldHeight;
    ...
    base.OnResize(e);
}