我在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
事件触发?或任何其他更好的方法来解决问题?
答案 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
}