gpt4 book ai didi

c# - 显示后如何在 UserControl 中调用方法?

转载 作者:可可西里 更新时间:2023-11-01 07:45:17 25 4
gpt4 key购买 nike

我有一个多 Pane 表单,左 Pane 中是一棵树,右 Pane 中是一个面板。树选择导致特定的用户控件被加载到面板上。在这种情况下,由于始终加载父窗体,因此我无法连接到父窗体的 Shown 事件。

我的大多数 UC 上都有一个未绑定(bind)的 DataGridView,需要在创建 UC 时对其进行填充。有时可以从 SQL Server 数据库预先添加 50,000 行。

到目前为止,我已经在 UC 构造函数期间填充了网格,但是自从我们开始处理 50,000 行以来,情况发生了变化。我发现出于某种疯狂的原因,从构造函数中用 50,000 行填充网格至少需要 15 分钟。但是,如果我等到单击按钮或加载事件才填充网格,则需要 15 秒。这是一个谜。所以我试图将网格的加载移到别处。

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

Shown 事件将是加载我的网格的完美场所,如果它存在于 UC 中的话。有谁知道另一种方法可以做到这一点?

最佳答案

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

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

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

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

if (Visible && !Disposing) PopulateGridView(); //<-- your population logic
}

关于c# - 显示后如何在 UserControl 中调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4672407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com