Vb.net 需要在事件处理程序括号外调用变量的帮助吗

Vb.net 需要在事件处理程序括号外调用变量的帮助吗,vb.net,Vb.net,我有这个密码 Private Sub moAccounts_PositionUpdate(ByVal poPositions As A4.API.AccountList.PositionUpdateList) Handles moAccounts.PositionUpdate ' Display the position details. For Each oUpdate As AccountList.PositionUpdateList.PositionUpdate In p

我有这个密码

Private Sub moAccounts_PositionUpdate(ByVal poPositions As A4.API.AccountList.PositionUpdateList) Handles moAccounts.PositionUpdate

    ' Display the position details.
    For Each oUpdate As AccountList.PositionUpdateList.PositionUpdate In poPositions

       'code here

    Next

    End sub
我想做的是从另一个子系统中调用上面的子系统。问题是变量PoPoPosition在代码中的其他地方都没有出现。我认为这是API提供的一系列数据。我需要找出如何从事件处理程序括号中的服务器API获取数据,这样我就可以调用上面的子函数并更新数据

我试过这个:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    udate()

End Sub

Private Sub udate()

    Dim poPositions As A4.API.AccountList.PositionUpdateList

    For Each oUpdate As AccountList.PositionUpdateList.PositionUpdate In poPositions

       'code here
    Next

End Sub
代码可以编译,但当我运行代码时,代码停止执行,并在PoPoPositions下面显示一个错误

    For Each oUpdate As AccountList.PositionUpdateList.PositionUpdate In **poPositions**

*Object reference not set to an instance of an object.*
如果ByVal poPositions作为A4.API.AccountList.PositionUpdateList在事件处理程序括号内工作,则它必须在事件处理程序括号外工作。(我想)问题在于语法

这显然行不通

Dim poPositions As A4.API.AccountList.PositionUpdateList
我在括号外试了一下:

ByVal poPositions As A4.API.AccountList.PositionUpdateList
但这会在ByVal中生成一个错误


所以我被困在如何。。。定义(?)。。。位置。当语句放置在事件处理程序括号外时,在PoPositions前面放置什么术语使其获取数据?

这一行是您的问题:

Dim poPositions As A4.API.AccountList.PositionUpdateList

您声明了变量,但从未设置过它。

您要做的并不像移动代码那么简单。触发moAccounts_PositionUpdate事件时,服务器具有需要传递给处理程序并提供的数据。如果您没有此信息,您必须从头开始创建它,或者重新使用服务器在先前调用moAccounts_PositionUpdate时提供的该信息的副本(除非服务器为您提供了一种按需请求该信息副本的方法)。您可以做的一件事是存储服务器提供的最后一个PopPositionValue的副本。但是,只有当moAccounts_PositionUpdate在任何人点击按钮之前发生时,此功能才起作用。如果moAccounts_PositionUpdate事件从未运行,则您将没有任何数据,并且该按钮将再次提示错误

Private cachedPoPositions As A4.API.AccountList.PositionUpdateList
Private Sub moAccounts_PositionUpdate(ByVal poPositions As A4.API.AccountList.PositionUpdateList) Handles moAccounts.PositionUpdate
    ' Save for re-use later
    cachedPoPositions = poPositions
    ' Display the position details.
    For Each oUpdate As AccountList.PositionUpdateList.PositionUpdate In poPositions
       'code here
    Next
End sub

Private Sub udate()
    For Each oUpdate As AccountList.PositionUpdateList.PositionUpdate In cachedPoPositions
       'code here
    Next
End Sub
如果您能找到一些函数,在需要时从API请求当前信息,那就更好了。例如:

Private Sub udate()
    Dim poPositions = moAccounts.GetPositionUpdateList()
    For Each oUpdate As AccountList.PositionUpdateList.PositionUpdate In poPositions
       'code here
    Next
End Sub

谢谢你的回复。是的,这就是想法,获取最新的职位列表。当表单加载'moAccounts_PositionUpdate'运行时,它们会按照自己的方式运行,但仅此而已。我希望找出如何根据需要触发该事件,因为我需要知道的数据(当前位置是什么)来自“ByVal poPositions as A4.API.AccountList.PopositionUpdateList”。是的,我可以存储第一次输入的原始数据,但是重新显示它没有帮助,因为我需要知道当前的位置,而不是一开始的位置。再次感谢您,您需要查看代码的底部块,看看是否可以找到一个函数来代替将请求当前版本的“GetPositionUpdateList”。或者,您需要使用第一块代码,并找到一种方法强制API按需触发事件。如果没有更多关于API的信息,我认为我们无法进一步帮助您。不过,无论是什么形式的负载迫使事件触发,都可能是一条值得探索的途径。也许每次单击按钮时都可以创建一个新的moAccounts实例,以强制它每次触发事件或其他事件。代码中没有其他内容将poPositions称为。。。它只是出现在这个小潜艇上。深入挖掘的唯一方法是打开API dll文件,但这可能太极端了。我的想法是,必须有一种方法可以按原样调用事件,例如“调用私有子moAccounts_PositionUpdate(ByVal poPositions as A4.API.AccountList.PositionUpdateList)处理moAccounts.PositionUpdate”,只需重新运行事件即可。不可能那么复杂。必须有办法重新运行事件。至少这肯定是最简单的解决办法。谢谢你的帮助!如果您进入一个子项(例如,您的按钮单击代码)并键入“moAccounts”并在末尾添加“.”,则会弹出API可以执行的所有操作的列表(至少是moAccounts部分)。希望这能帮助您猜测一些有用的东西,您可以尝试使用API。如果有什么方法看起来像是强制事件重新运行的方法,或者是刷新或重新获取PositionUpdateList值的方法,那就值得一试。是的,但我想如何设置它是个问题…'将PopPositions设置为A4.API.AccountList.PositionUpdateList=???'?当事件运行时,数据会出现,这让我很沮丧,但我不知道如何按需“重新运行”事件以进行更新。我唯一能做的就是关闭应用程序并重新加载表单,等等,这当然不是我想要的。我想“单击”一个按钮,然后重新运行事件并获取数据,或者用其他方法将事件处理程序括号中的数据获取到我可以使用的另一个变量中。可能是语法问题?