c#检测窗口真的调整大小而不是移动

ghi*_*boz 3 c# winforms window-resize

在我的winform程序中,我需要检测表单何时调整大小:但是ResizeEnd当表单被移动到桌面时也会调用该方法.

是否可以仅在窗口调整大小时进行检查?

在我的脑海里,我可以保存最后的宽度和最后的高度,并进入如下ResizeEnd方法:

int lastWidth;
int lastHeigth;
private void frmMain_ResizeEnd(object sender, EventArgs e)
{
    if (lastHeigth != this.Height || lastWidth != this.Width)
    {
        lastHeigth = this.Height;
        lastWidth = this.Width;
        fireResize();
    }
}
Run Code Online (Sandbox Code Playgroud)

但这是一个丑陋的解决方案......

TaW*_*TaW 5

仅略微优于原始解决方案,但至少它解决了问题,而不仅仅是引用文档.

显而易见的问题是,Resize所有时间都会发生火灾,因此似乎需要一个标志:

bool sizing = false;
private void Form1_ResizeEnd(object sender, EventArgs e)
{
    if (!sizing) return;
    if (sizing) {sizing = false; /*do your stuff*/ }
}

private void Form1_Resize(object sender, EventArgs e)
{
    sizing = true;
}
Run Code Online (Sandbox Code Playgroud)

当然最好有一个指标EventArgs,ResizeEnd但看不到更简单的方法.

BTW,而不是检查WidthHeight使用Size也将是一个小改进..