我正在编写一个用户控件,希望在调整大小完成后绘制该用户控件。但我找不到与 Windows 窗体中的 "ResizeEnd" 相当的事件。
是否有等效于用户控件的事件?
请注意,在这种情况下,用户控件的父控件本身也是一个用户控件,因此我无法将其(父用户控件)转换为窗体。由于我正在使用框架,因此无法访问将显示该用户控件的窗体。
没有相应的功能。一个表单有一个模态大小调整循环,当用户点击表单的边缘或角落时启动。子控件不能以这种方式调整大小,它只能看到其Size属性的更改。
通过为您的用户控件添加Sizing属性来解决此问题。表单可以轻松地从其OnResizeBegin/End()重写中分配它。在UC的Load事件中跟随Parent属性直到找到Form也是可能的:
public bool Resizing { get; set; }
private void UserControl1_Load(object sender, EventArgs e) {
if (!this.DesignMode) {
var parent = this.Parent;
while (!(parent is Form)) parent = parent.Parent;
var form = parent as Form;
form.ResizeBegin += (s, ea) => this.Resizing = true;
form.ResizeEnd += (s, ea) => this.Resizing = false;
}
}
this.FindForm()
也会返回null。你有另一个想法吗? - Marco private Timer _timer;
public MyControl()
{
_timer = new Timer();
_timer.Interval = 500;
_timer.Tick += (sender, e) => ResizeFinished();
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
_timer.Start();
}
private void ResizeFinished()
{
_timer.Stop();
// Your code
}