-1

我有这个代码

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

我想要做的是从另一个子中调用上面的子。问题是变量 poPositions 没有出现在代码中的其他地方。我认为这是由 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 poPositions As A4.API.AccountList.PositionUpdateList 在事件处理程序括号内工作,它必须在外部工作。问题是(我猜)在语法中

这显然行不通

Dim poPositions As A4.API.AccountList.PositionUpdateList

我在括号试过这个:

ByVal poPositions As A4.API.AccountList.PositionUpdateList

但这会在 ByVal 处产生错误

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

4

2 回答 2

1

这条线是你的问题:

Dim poPositions As A4.API.AccountList.PositionUpdateList

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

于 2013-10-17T16:03:15.810 回答
0

你想要做的并不像移动代码那么简单。当 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
于 2013-10-17T16:09:55.873 回答