需要帮助调用事件处理程序括号外的变量



我有这个代码

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

我想做的是从另一个子中调用上面的子。 问题是变量poPosition在代码中没有出现在其他任何地方。我认为这是由 API 提供的数据数组。我需要了解如何从事件处理程序括号中的服务器 API 获取数据,以便我可以调用上面的 sub 并更新数据

我试过这个:

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
代码

编译,但是当我运行代码时,代码停止执行并显示一个错误,下划线 poPositions

    For Each oUpdate As AccountList.PositionUpdateList.PositionUpdate In **poPositions**
*Object reference not set to an instance of an object.*

如果 ByVal 位置为 A4。应用程序接口。AccountList.PositionUpdateList 在事件处理程序括号内工作,它必须在外部工作。问题出在语法中(我猜)

这显然行不通

Dim poPositions As A4.API.AccountList.PositionUpdateList

我在括号尝试了这个:

ByVal poPositions As A4.API.AccountList.PositionUpdateList

但这会在 ByVal 上产生错误

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

这一行是你的问题:

Dim poPositions As A4.API.AccountList.PositionUpdateList

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

您要执行的操作并不像移动代码那么简单。触发 moAccounts_PositionUpdate 事件时,服务器具有需要传递给处理程序的数据并提供这些数据。如果没有此信息,则必须从头开始创建它,或者重复使用服务器在早期调用moAccounts_PositionUpdate中提供的信息的副本(除非服务器为您提供了按需请求该信息副本的方法)。您可以做的一件事是存储服务器提供的最后一个 poPositionsValue 的副本。但是,这仅在任何人单击按钮之前发生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

最新更新