2013-05-01 76 views
-1

我有一個名爲OPIMG(2000,2000,10)的多維數組,它包含多組圖像數據(16位灰度圖像作爲數據使用在用戶控制中),我在主窗體上創建。我需要能夠從活動X中訪問這些數據,但無法將數組放入控件中。VB如何將多維數組傳遞給ActiveX控件

我試圖在控件內創建一個新的數組,並通過值複製數據,但這花了太多時間,所以我需要找到一種方法,可以直接從用戶控件訪問公共數組。

+0

您是否編寫了ActiveX控件?這聽起來像你有源代碼...如果是的話,寫入的ActiveX控件是什麼語言? – 2013-05-01 18:20:42

+0

這聽起來有很多內存來回傳遞。如果你可以重寫代碼來傳遞像IEnumVARIANT這樣的迭代器,那麼內存佔用可能會小很多。 – 2013-05-01 22:14:09

回答

0

我盛諮昂同意這就是它的大量的內存通過了作爲它的作品出來

2000 x 2000 x 10 = 40,000,000 
Approximately 40Mb 

可是偏偏,回答你的問題,我已經貼了頁面和用戶代碼控制。

PAGE CODE 

<%@ Page Language="VB" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<%@ Register Src="~/MyUserControl.ascx" TagName="MyUserCtrlItem" TagPrefix="UC1" %> 
<script runat="server"> 

Private _MyArray(,,) As Long 
' 
Protected Sub Page_Load(sender As Object, e As System.EventArgs) 
' 
Dim X As Integer 
Dim Y As Integer 
Dim Z As Integer 
Dim Number As Long 
    ' 
    ' Populate array with test data 
    ReDim _MyArray(2000, 2000, 10) 
    For Z = 0 To 9 
    For Y = 0 To 199 
     For X = 0 To 199 
     Number = Number + 1 
     _MyArray(X, Y, Z) = Number 
     Next 
    Next 
    Next 
    MyUserCtrlItem1.MyCtrlArray = _MyArray 
    ' 
End Sub 
' 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <UC1:MyUserCtrlItem ID="MyUserCtrlItem1" runat="server" /> 
    </form> 
</body> 
</html> 

和用戶控制

USER CONTROL 

<%@ Control Language="VB" ClassName="MyUserControl" %> 

<script runat="server"> 

Private _MyCtrlArray(,,) As Long 

Property MyCtrlArray As Array 
    Get 
    Return _MyCtrlArray 
    End Get 
    Set(value As Array) 
    _MyCtrlArray = value 
    End Set 
End Property 

Protected Sub Button1_Click(sender As Object, e As System.EventArgs) 
    If TextBox1.Text <> "" Then 
    If TextBox2.Text <> "" Then 
     If TextBox3.Text <> "" Then 
     Label1.Text = _MyCtrlArray(CInt(TextBox1.Text), CInt(TextBox2.Text), CInt(TextBox3.Text)) 
     Else 
     Label1.Text = "Z value missing/invalid!" 
     End If 
    Else 
     Label1.Text = "Y value missing/invalid!" 
    End If 
    Else 
    Label1.Text = "X value missing/invalid!" 
    End If 
    TextBox1.Text = "" 
    TextBox2.Text = "" 
    TextBox3.Text = "" 
End Sub 

</script> 

<!-- HTML --> 
X Value: <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br /> 
Y Value: <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br /> 
Z Value: <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox><br /><br /> 
Data: <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br /><br /> 
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /> 

在代碼示例代碼,你XY和Z輸入一個值,它會返回NUMBER的該元素保存的值(我只是在頁面加載事件中遞增)

+0

非常感謝你們,這似乎很好。但我沒有想到內存使用情況。就像事後想到的那樣,我認爲找到陣列的內存起始地址並將該信息發送給活動的X控件會更快,更高效。兩者都是用VB自己寫的,所以我可以操縱數據不過我想要。但後來林不知道如何將數組指向該地址。想一想我在這裏,但它需要做的 – 2013-05-02 07:44:01