2013-10-17 2 views
0

내가이 코드이벤트 핸들러의 변수 외부를 호출 도움이 필요

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에 의해 공급되는 데이터의 배열이라고 생각한다.

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 

코드 컴파일 : 나는 그때 내가이 시도

데이터를 위의 서브를 호출하고 업데이트 할 수 있도록 이벤트 핸들러 괄호에있는 서버 API에서 데이터를 얻을 수있는 방법을 찾을 필요 하지만 코드를 실행하면 코드의 실행을 중지하고 A4.API.AccountList.PositionUpdateList 이벤트 핸들러 괄호 안에 작동으로, 그것이 갖는 ByVal의 poPositions 외부 작업 할 경우 오류 밑줄 poPositions

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

*Object reference not set to an instance of an object.* 

를 나타낸다. 문제는 구문 (내 생각)입니다

내가 외부 괄호이 을 시도

Dim poPositions As A4.API.AccountList.PositionUpdateList 

이 분명히 나던 작업 :

ByVal poPositions As A4.API.AccountList.PositionUpdateList 

을하지만 그 ByVal의

에서 오류가 발생합니다

그래서 나는 어떻게 ... 정의 (?) ... poPositions에 붙어 있습니다. pPositons 앞에 넣을 단어는 무엇입니까? 외부에 이벤트 처리기 괄호가 있으면 데이터를 가져올 수 있습니까?

Dim poPositions As A4.API.AccountList.PositionUpdateList 

당신은 변수를 선언하지만, 당신이 그것을 설정하지 :

답변

0

코드를 이동하는 것만 큼 간단하지 않습니다. moAccounts_PositionUpdate 이벤트가 트리거되면 서버는 처리기로 전달되어야하는 데이터를 가지고이를 제공합니다. 이 정보가 없으면 처음부터 moAccounts_PositionUpdate를 호출 할 때 서버가 제공 한 정보 사본을 처음부터 다시 만들어야합니다 (서버가 사본을 요청할 수있는 방법을 제공하지 않는 한) 수요에 관한 그 정보의). 한 가지 할 수있는 것은 서버가 제공 한 마지막 poPositionsValue 사본을 저장하는 것입니다. 그러나 moAccounts_PositionUpdate가 발생하면 이 발생하고 버튼을 클릭하기 전에 만 작동합니다. moAccounts_PositionUpdate 이벤트가 실행되지 않으면 아무 데이터도 없으며 버튼이 다시 오류를 줄 것입니다. 당신이 요청는 API의 현재 정보가 필요한 것 몇 가지 기능을 찾을 수 있다면 더 좋을 것이다 무엇

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 

이다. 예를 들면 다음과 같습니다.

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

답장을 보내 주셔서 감사합니다. 네, 가장 최근의 직책을 얻기위한 아이디어입니다. 폼에 'moAccounts_PositionUpdate'로드가 실행될 때와 같은 방식으로 실행되지만 그게 전부입니다. 나는 내가 알 필요가있는 데이터 (현재 위치가 무엇인지)가 'ByVal poPositions As A4.API.AccountList.PositionUpdateList'에서 나오는 것처럼 요청에 따라 해당 이벤트를 발생시키는 방법을 알아 내려고했다. 예, 처음에 들어오는 원본 데이터를 저장할 수는 있지만 처음 위치에있는 것이 아니라 현재 위치가 무엇인지 알 필요가 있기 때문에 다시 표시하는 데 도움이됩니다. 다시 한 번 감사드립니다 – user2835653

+0

다음 코드의 하단 블록을보고 현재 버전을 요청할 "GetPositionUpdateList"대신 사용할 함수를 찾을 수 있는지 확인해야합니다. 또는 첫 번째 코드 블록을 사용하여 API가 필요에 따라 이벤트를 실행하도록하는 방법을 찾아야합니다. API에 대한 자세한 정보가 없으면 우리가 더 이상 당신을 도울 수 있다고 생각하지 않습니다. Form_Load가 수행하는 모든 작업이 이벤트를 발생 시키더라도 탐색 할 수있는 경로 일 수 있습니다. 아마도 moAccounts의 새로운 인스턴스는 버튼을 클릭 할 때마다 매번 이벤트를 트리거하도록 만들 수 있습니다. – BlueMonkMN

+0

poPositions를 참조하는 코드에는 다른 것이 없습니다 ...이 작은 하위 영역에 나타납니다. 더 깊은 것을 파헤 치는 유일한 방법은 API dll 파일을 열어서 깨는 것일 수 있지만, 그것은 아마도 너무 극단적입니다. 내 생각은 이벤트를 그냥 호출하는 방법이 있어야합니다. 예를 들어, 'private private sub moAccounts_PositionUpdate (ByVal poPositions As A4.API.AccountList.PositionUpdateList) Handles moAccounts.PositionUpdate'와 같은 이벤트를 단순히 다시 실행하면됩니다. 복잡하지는 않습니다. 이벤트를 다시 실행하는 방법이 있어야합니다. 최소한 그것은 가장 쉬운 해결책 일 것입니다. 모든 도움에 감사드립니다! – user2835653

1

이 줄은 당신의 문제입니다.

+0

예, 설정하는 방법은 문제가 아닙니다. 'Dim poPositions As A4.API.AccountList.PositionUpdateList = ???' ? 이벤트가 실행될 때 데이터가 들어오는 것을 알기가 실망 스럽지만 업데이트 할 수있는 이벤트를 '다시 실행하는'방법을 파악할 수 없습니다.내가 할 수있는 유일한 방법은 응용 프로그램을 닫고 양식 등을 다시로드하는 것입니다. 물론 원하는 것은 아닙니다. 버튼을 클릭하고 이벤트를 다시 실행하여 데이터를 가져 오거나 이벤트 처리기 괄호 안에있는 데이터를 다른 방법으로 가져 와서 다른 변수에 넣을 수 있습니다. 구문 문제 일 수 있습니까? – user2835653