Vb.net 如果主窗体上接收到新数据,如何将其添加到子窗体上的ListView

Vb.net 如果主窗体上接收到新数据,如何将其添加到子窗体上的ListView,vb.net,Vb.net,我有一个子表单(我们称之为ChildForm),它由父表单(MainForm)实例化。子窗体有一个ListView控件,当最初打开该控件时,它会根据MainForm管理的公共集合填充数据。子窗体中管理ListView填充的方法称为PopulateLog,并调用AddItemsToLog(logEntry)。这个很好用 但是,当子窗体打开并显示时,主窗体可能会收到添加到集合中的其他元素。因此,为了动态显示接收到的数据,我在MainForm中尝试了以下方法,但似乎不起作用-没有任何东西会改变子窗体中

我有一个子表单(我们称之为ChildForm),它由父表单(MainForm)实例化。子窗体有一个ListView控件,当最初打开该控件时,它会根据MainForm管理的公共集合填充数据。子窗体中管理ListView填充的方法称为PopulateLog,并调用AddItemsToLog(logEntry)。这个很好用

但是,当子窗体打开并显示时,主窗体可能会收到添加到集合中的其他元素。因此,为了动态显示接收到的数据,我在MainForm中尝试了以下方法,但似乎不起作用-没有任何东西会改变子窗体中ListView的显示

        If Application.OpenForms().OfType(Of ChildForm).Any Then
            ChildForm.AddItemsToLog(newLogEntry)
        End If
我在MainForm中尝试了ChildForm.Refresh(),但也没有结果

我已经搜索了几个小时,没有找到一个明确的例子来说明如何做到这一点-我怀疑使用事件/委托是一个方向-任何帮助都是非常感谢的。我怀疑这将是一个有用且经常使用的功能,但我感到沮丧的是,它没有明确的文档记录


编辑:我还应该注意,调用ListViewLogReceived.Items.Count时,ListViewLogReceived.Items.Count会递增,但视图似乎不会刷新。这意味着添加的数据只是没有显示出来

我似乎无法选择汉斯的答案,但他把我带到了正确的地方。我(业余地)指的是表单的类名,而不是表单的实例化版本。这项工作:

If Application.OpenForms().OfType(Of ChildForm).Any Then
    myChildForm.AddItemsToLog(newLogEntry)
End If

AddItemsToLog()方法是公共的吗?当你说MainForm的元素时,这是一个简单的数组吗?还是Listview项?是的,AddItemsToLog是公共的。该
If
语句和对象的大小写似乎可疑。
AddItemsToLog()
是静态方法(我认为在VB中
Shared
)还是实例方法?这种用法看起来是静态的。您应该维护对
ChildForm
打开实例的实际对象引用,并在该特定实例上调用该方法,而不是查找
ChildForm
类型的任何形式是否存在。是的,AddItemsToLog是公共的。是的,我会在调用之前正确处理数据,以确保它符合AddItemsToLog的要求。bold重要的是,如果我在AddItemsToLog上放置断点,它确实会在那里中断。*bold*下面是代码片段:'Public Sub AddItemsToLog(ByVal条目作为NotificationLogEntry)Dim item作为新的ListViewItem()项。Text=entry.Time.ToString()。。。item.Tag=entry ListViewLogReceived.Items.Add(item)item.EnsureVisible()End Sub'ChildForm在这里是一个对象,而不是一个类。讨厌的VB.NET语法怪癖。当这段代码在线程中运行时,它会完全崩溃,这可能是您从未看到它的原因。