编程语言
首页 > 编程语言> > C#检测窗口是否真正调整大小而不是移动

C#检测窗口是否真正调整大小而不是移动

作者:互联网

在我的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();
    }
}

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

解决方法:

仅比原始解决方案好一点,但至少可以解决问题,而不仅仅是引用文档.

显然,问题在于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;
}

当然,在ResizeEnd的EventArgs中有一个指示器会很好,但是看不到一种更简单的方法.

顺便说一句,代替使用Size检查Width和Height也是一个小改进.

标签:window-resize,c,winforms
来源: https://codeday.me/bug/20191029/1959784.html