【问题标题】:How to stop ResizeEnd event when form is moved?移动表单时如何停止 ResizeEnd 事件?
【发布时间】:2012-02-03 09:34:44
【问题描述】:

我在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 事件在表单移动时触发?或任何其他更好的方法来解决这个问题?

【问题讨论】:

  • 感谢您提出这个问题,这也是我的问题。这个事件的行为对我来说似乎很奇怪。
  • 请考虑 SizeChanged 事件。

标签: winforms


【解决方案1】:

您可以将检查 sizechange 移动到新的基本形式。在派生表单上,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);
    }

}

【讨论】:

    【解决方案2】:
    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
     }
    

    【讨论】:

    • 请在您的回答中添加一些解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2017-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    相关资源
    最近更新 更多