在运行方法之前,请确保UserControl已完全完成自身的绘制

鲁拉克

我有一个类似于mdi表单的主窗口表单。当用户从菜单中选择一个选项时,主窗口将加载要显示的UserControl。

Private Sub treNavTree_NodeMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles treNavTree.NodeMouseClick

Dim nextDisplay As UserControl = GetUserControl(e.Node.Text)
If nextDisplay Is Nothing Then Exit Sub

pnlMain.Controls.Remove(currentDisplay)
currentDisplay = nextDisplay

pnlMain.Controls.Add(currentDisplay, 1, 0)
currentDisplay.Dock = DockStyle.Fill

currentDisplay.Show()

End Sub

这些加载的每个UserControl都有一个ListView,其中包含从数据库中获取的许多项目。就目前而言,这些列表视图填充有UserControl.Load事件中的上述项目。这是一个问题,因为在等待这些大型列表视图填充时,UserControl.Paint明显闪烁/挂起。我的想法是将ListView的加载从UserControl的Load事件之外移到其自己的方法中,并在调用Show()之后进行调用。不幸的是,在开始加载列表视图之前,UserControl似乎并没有完全完成“首先显示”。至少,它仍然以完全相同的方式挂起。为什么会这样呢?在开始下一行之前还没有完全完成?我怀疑是这样,因为Show()和ShowDialog()之间存在差异。MSDN表示,与ShowDialog()相对,在调用Show()之后,代码将继续执行。如何在运行LoadListView方法之前确保UserControl完全完成自身的绘制?为了尽量减少闪烁,我尝试了互联网上的所有建议。什么都行不通。我需要这种情况发生。谢谢!

Private Sub treNavTree_NodeMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles treNavTree.NodeMouseClick

Dim nextDisplay As UserControl = GetUserControl(e.Node.Text)
If nextDisplay Is Nothing Then Exit Sub

pnlMain.Controls.Remove(currentDisplay)
currentDisplay = nextDisplay

pnlMain.Controls.Add(currentDisplay, 1, 0)
currentDisplay.Dock = DockStyle.Fill

currentDisplay.Show()
currentDisplay.LoadListView()  'Load the listview after done showing

End Sub
鲁拉克

在尝试了几种不同的方法之后,.Show()如果不立即启动ListView的加载,便无法找到通往下一个UserControl的方法我现在很确定它必须异步运行.Show()并在加载表单时继续处理下几行,这不可避免。因此,我制作了自己的后台工作程序,并在该线程上加载了列表视图,同时在主线程上加载了UserControl,并在加载完成后将后台工作程序线程又回到了主线程上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在继续之前,请确保文件夹树已完成

来自分类Dev

在开始摩卡测试之前,请确保Express应用程序正在运行

来自分类Dev

在运行“ npm版本”之前,请确保用户在主服务器上

来自分类Dev

如何在测试标头之前确保请求已完成?

来自分类Dev

片段-在运行方法之前等待onCreateView()完成

来自分类Dev

我如何知道远程进程正在运行或已完成?

来自分类Dev

我如何知道远程进程正在运行或已完成?

来自分类Dev

如果事件已完成,如何运行方法?

来自分类Dev

在导航到另一页之前,如何确保减速器响应动作已完成?

来自分类Dev

jQuery效果在运行之前等待之前完成

来自分类Dev

使用inotifywait(或替代方法)在运行脚本之前等待rsync传输完成?

来自分类Dev

在“ img”元素有机会完全加载之前,drawImage canvas方法正在运行

来自分类Dev

在.hide()完成动画之前,请不要运行函数

来自分类Dev

Swift:如何确保在 http 任务完成之前不运行序列?

来自分类Dev

在angular 7中循环运行时,如何确保http帖子已完全执行?

来自分类Dev

在绘制d3图表之前检查多个异步功能是否已完成

来自分类Dev

如何知道活动生命周期方法已完成运行

来自分类Dev

确保Firebase中的异步操作已完成

来自分类Dev

如何确保 cygwin 调用已完成?

来自分类Dev

python multiprocessing-在正在运行的进程上进行类似选择,以查看已完成的进程

来自分类Dev

如何使用swift检查线程是否正在运行或已完成

来自分类Dev

如何在运行新服务之前完成systemd服务?

来自分类Dev

在完全加载html之前我的js正在运行

来自分类Dev

在运行宏之前等待文档完全打开

来自分类Dev

在运行用户要运行的命令之前,请运行另一个命令

来自分类Dev

在运行之前访问Runnable的方法

来自分类Dev

在运行其余方法之前更新UI

来自分类Dev

在继续之前验证 dbman 已完成

来自分类Dev

方法在$ .getJson完成运行之前结束

Related 相关文章

  1. 1

    在继续之前,请确保文件夹树已完成

  2. 2

    在开始摩卡测试之前,请确保Express应用程序正在运行

  3. 3

    在运行“ npm版本”之前,请确保用户在主服务器上

  4. 4

    如何在测试标头之前确保请求已完成?

  5. 5

    片段-在运行方法之前等待onCreateView()完成

  6. 6

    我如何知道远程进程正在运行或已完成?

  7. 7

    我如何知道远程进程正在运行或已完成?

  8. 8

    如果事件已完成,如何运行方法?

  9. 9

    在导航到另一页之前,如何确保减速器响应动作已完成?

  10. 10

    jQuery效果在运行之前等待之前完成

  11. 11

    使用inotifywait(或替代方法)在运行脚本之前等待rsync传输完成?

  12. 12

    在“ img”元素有机会完全加载之前,drawImage canvas方法正在运行

  13. 13

    在.hide()完成动画之前,请不要运行函数

  14. 14

    Swift:如何确保在 http 任务完成之前不运行序列?

  15. 15

    在angular 7中循环运行时,如何确保http帖子已完全执行?

  16. 16

    在绘制d3图表之前检查多个异步功能是否已完成

  17. 17

    如何知道活动生命周期方法已完成运行

  18. 18

    确保Firebase中的异步操作已完成

  19. 19

    如何确保 cygwin 调用已完成?

  20. 20

    python multiprocessing-在正在运行的进程上进行类似选择,以查看已完成的进程

  21. 21

    如何使用swift检查线程是否正在运行或已完成

  22. 22

    如何在运行新服务之前完成systemd服务?

  23. 23

    在完全加载html之前我的js正在运行

  24. 24

    在运行宏之前等待文档完全打开

  25. 25

    在运行用户要运行的命令之前,请运行另一个命令

  26. 26

    在运行之前访问Runnable的方法

  27. 27

    在运行其余方法之前更新UI

  28. 28

    在继续之前验证 dbman 已完成

  29. 29

    方法在$ .getJson完成运行之前结束

热门标签

归档