移动表单时如何停止ResizeEnd事件?

时间:2012-02-03 09:34:45

标签: winforms

我在ResizeEnd形式的事件中编写了某些代码。现在问题是当通过单击并拖动标题栏移动表单时,即使表单大小未更改,也会触发ResizeEnd事件并执行代码。

我浏览了Resizeend事件的MSDN文档,它说当表单移动时会触发事件(不明白为什么在未更改大小时会发生这种情况)。

对于解决方案,我将if条件检查是否大小如下所示更改以停止在表单移动上执行代码:

int Prv_Height; int Prv_Width;
private void TemplateGrid_ResizeEnd(object sender, EventArgs e)
{
    if (this.Size.Width != Prv_Width || this.Size.Height != Prv_Height)
    {
        Prv_Width = this.Size.Width;
        Prv_Height = this.Size.Height;
        //Other code here when form resize ends...
    }
}

有什么方法可以在移动表单时阻止ResizeEnd事件触发?或任何其他更好的方法来解决问题?

2 个答案:

答案 0 :(得分:0)

您可以将尺寸更改检查移至新的基本形式。在派生表单上,resizeEnd事件将仅在实际更改大小时触发。

public partial class CustomForm : Form
{                       
    private Size _prvSize;

    public CustomForm()
    {
        InitializeComponent();        
    }

    protected override void OnShown(EventArgs e)
    {
        _prvSize = this.Size;
        base.OnShown(e);
    }

    protected override void OnResizeEnd(EventArgs e)
    {
        if (this.Size == _prvSize)
            return;

        _prvSize = this.Size;
        base.OnResizeEnd(e);
    }

}

答案 1 :(得分:-1)

private void Form1_ResizeBegin(object sender, EventArgs e)
 {
    oldSize = ClientSize;
 }
 private Size oldSize = new Size();
 private void Form1_ResizeEnd(object sender, EventArgs e)
 {
     if (oldSize == ClientSize)
        return;
    //Add Something
 }