如何在显示后调用UserControl中的方法?

Dav*_*wig 16 c# winforms

我有一个多窗格的表单,在左窗格中是一个树,在右窗格中是一个面板.树选择导致在Panel上加载特定的UserControl.在这种情况下,由于父表单总是被加载,我无法挂钩到父表单的Shown事件.

我的大多数UC都有一个未绑定的DataGridView,需要在创建UC时填充它们.从SQL Server数据库有时可以预先添加50,000行.

到目前为止,我已经在UC构造函数中填充了网格,但是自从我们开始使用50,000行后,事情就发生了变化.我发现,由于某些疯狂的原因,从构造函数中填充50,000行的网格需要至少15分钟.但是,如果我等到填充网格直到我单击按钮或从Load事件,则需要15秒.这是一个谜.所以我试图将网格加载到其他地方.

但是,当我尝试从Load事件填充网格时,会出现视觉上的不一致.会发生什么,是否看到我的UC的小版本出现,加载DGV行需要15秒,然后UC扩展以填充Panel(UC Dock属性设置为Fill).所以我也不喜欢这个选项.

如果它存在于UC的话,Shown事件将是加载我的网格的完美场所.有谁知道另一种方法吗?

Kei*_*thS 20

我对类似问题的回答是在网格首次可见时填充DGV.这是延迟加载的本质; 在最后一秒获得信息.

挂钩到VisibleChanged,当您的控件调用Show()或Hide()或手动设置Visible属性时将触发.如果该字段当前可见,并且控件未处于关闭或处置的过程中(因为在某些奇怪的原因,控件在这种情况下可以显示),请执行网格填充.

这是必要的处理程序,非常简单:

protected override void OnVisibleChanged(EventArgs e)
{
    base.OnVisibleChanged(e);

    if (Visible && !Disposing) PopulateGridView(); //<-- your population logic
}
Run Code Online (Sandbox Code Playgroud)