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

时间:2014-06-25 09:04:26

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

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

4 个答案:

答案 0 :(得分: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;
}

当然,EventArgs ResizeEnd中有一个指标会很好,但是看不到更简单的方法。

BTW,而不是使用Width检查HeightSize也是一个很小的改进。

答案 1 :(得分:0)

为什么不用这个?这对我来说很好......

 public Form1()
 {
     this.Resize += Form1_Resize;
 }

 void Form1_Resize(object sender, EventArgs e)
 {
     // do what you want to do 
 }

此处从MSDN

中读取此内容
  

当用户开始调整表单大小时,通常通过单击并拖动位于表单右下角的其中一个边框或大小调整手柄来引发ResizeBegin事件。此操作将表单放入模态大小调整循环,直到调整大小操作完成。通常,在调整大小操作期间会发生以下事件集:

     
      
  • 当表单进入调整大小模式时,会发生单个ResizeBegin事件。

  •   
  • 修改表单的大小时,会发生零对或多对Resize和SizeChanged事件。

  •   
  • 当表单退出调整大小模式时,会发生单个ResizeEnd事件。

  •   
     

注意:

     

只需单击而不拖动边框或调整大小,就会生成ResizeBegin和ResizeEnd事件,而不会有任何中间Resize和SizeChanged事件对。

     

当用户移动表单时,也会引发ResizeBegin和ResizeEnd事件对,通常是通过单击并拖动标题栏。这些事件不是通过编程操作表单生成的,例如通过更改“大小”或“位置”属性。

答案 2 :(得分:0)

使用简单的Resize事件。它仅在调整大小时触发。

答案 3 :(得分:-1)

查看文档怎么样? The second search engine hit如下。

Form.ResizeBegin Event - MSDN

当用户开始调整表单大小时,通常通过单击并拖动位于表单右下角的其中一个边框或大小调整手柄来引发ResizeBegin事件。此操作将表单放入模态大小调整循环,直到调整大小操作完成。通常,在调整大小操作期间会发生以下事件集:

  1. 当表单进入调整大小模式时,会发生单个ResizeBegin事件。
  2. 修改表单的大小时,会发生零个或多个Resize和SizeChanged事件对。
  3. 当表单退出调整大小模式时,会发生单个ResizeEnd事件。
  4.   

    只需单击而不拖动边框或调整大小,就会生成ResizeBegin和ResizeEnd事件,而不会有任何中间Resize和SizeChanged事件对。

    当用户移动表单时,也会引发ResizeBegin和ResizeEnd事件对,通常是通过单击并拖动标题栏。这些事件不是通过编程操作表单生成的,例如通过更改“大小”或“位置”属性。