none
[VB6]如何改變多為陣列大小? RRS feed

  • 問題

  •  

    請問如何使用ReDim Preserve來改變二為陣列大小,一開始也不能打Myarray(,),那要怎麼重新宣告陣列大小,請大家給我個建議或方向~ 謝謝~

     

    我的程式碼:

    Dim a() As Integer


    Private Sub Command1_Click()
    ReDim Preserve a(UBound(a, 1) + 5, 100)
    Print UBound(a, 1)
    Print UBound(a, 2)
    End Sub


    Private Sub Form_Load()
    ReDim a(2, 4)
    End Sub

    按下按鈕會跑出陣列索引超出範圍~
    2008年7月2日 上午 01:21

解答

  • 線上手冊要多看:

    Code Snippet

     

    如果使用了 Preserve 關鍵字,則只能重新改變陣列最後一維的大小,而不能改變維數的數目。舉例來說,如果陣列只有一維,則可以改變此維的大小,因為它是最後且唯一的一維。然而,如果陣列有二維以上,則只能改變最後一維的大小,且仍然可以保留陣列的內容。下面的例子表示可以增加動態陣列最後一維的大小,且不必刪除陣列裏原有的資料。

    ReDim X(10, 10, 10)
    . . .
    ReDim Preserve X(10, 10, 15)
    

     

     

    多維宣告:

    Dim a(,) As Integer

     

    在沒有維度之前應該用:

    ReDim a(x, y) As Integer

     

    來作初始化宣告,初始化後才能加關鍵字 Preserve ,所以有時我們會在一開始宣告就宣告 a(0, 0) ,這樣在程式碼內就可以直接用 Preserve 。

     

    另外用 Variant 陣列可以處理第一維的改變,但是這部分在 VB2003 以前都沒描述,但可用。

    你可以先看看 VB2005 的線上手冊,再改成 VB6 語法:

    http://msdn.microsoft.com/zh-tw/library/hkhhsz9t(VS.80).aspx

     

    Variant 陣列變更上下限可參考:

    http://tlcheng.twbbs.org/Paper/Variant/Variant.htm

     

    不規則陣列我應用在下面那篇,早期微軟沒有統一翻譯時,我是稱呼它為樹狀陣列:

    http://tlcheng.twbbs.org/Paper/IrrPaddy2004/IrrPaddy.htm

    2008年7月2日 上午 03:28
    版主

所有回覆

  • HI,

     

    請參考:

    http://www.developerfusion.co.uk/show/241/

     

    tihs

     

    2008年7月2日 上午 02:39
  • 還是不行耶 我有附程式碼~

     

    2008年7月2日 上午 03:08
  • 線上手冊要多看:

    Code Snippet

     

    如果使用了 Preserve 關鍵字,則只能重新改變陣列最後一維的大小,而不能改變維數的數目。舉例來說,如果陣列只有一維,則可以改變此維的大小,因為它是最後且唯一的一維。然而,如果陣列有二維以上,則只能改變最後一維的大小,且仍然可以保留陣列的內容。下面的例子表示可以增加動態陣列最後一維的大小,且不必刪除陣列裏原有的資料。

    ReDim X(10, 10, 10)
    . . .
    ReDim Preserve X(10, 10, 15)
    

     

     

    多維宣告:

    Dim a(,) As Integer

     

    在沒有維度之前應該用:

    ReDim a(x, y) As Integer

     

    來作初始化宣告,初始化後才能加關鍵字 Preserve ,所以有時我們會在一開始宣告就宣告 a(0, 0) ,這樣在程式碼內就可以直接用 Preserve 。

     

    另外用 Variant 陣列可以處理第一維的改變,但是這部分在 VB2003 以前都沒描述,但可用。

    你可以先看看 VB2005 的線上手冊,再改成 VB6 語法:

    http://msdn.microsoft.com/zh-tw/library/hkhhsz9t(VS.80).aspx

     

    Variant 陣列變更上下限可參考:

    http://tlcheng.twbbs.org/Paper/Variant/Variant.htm

     

    不規則陣列我應用在下面那篇,早期微軟沒有統一翻譯時,我是稱呼它為樹狀陣列:

    http://tlcheng.twbbs.org/Paper/IrrPaddy2004/IrrPaddy.htm

    2008年7月2日 上午 03:28
    版主
  • HI,

     

    因為已經找不到VB6的環境, 所只好請您參考:

    http://www.daniweb.com/forums/thread92108.html

     

    tihs

    2008年7月2日 上午 03:37
  •  

    不懂 ,意思就是二維陣列不能用Redim Preserve來重新宣告大小?

    所以二維陣列不能改成動態的?

    2008年7月2日 下午 01:54
  • 你把引用線上手冊那段看不懂的地方摘出來看看。

     

    線上手冊已經寫的很白話了,還有三維的範例,沒看到哪段說二維不能用或二為不能用動態,只有說到多維的限制在哪。

     

    2008年7月2日 下午 02:59
    版主
  • VB2005那篇嗎?

     

    2008年7月2日 下午 03:03
  •  

    線上手冊要多看:

    Code Snippet

     

    如果使用了 Preserve 關鍵字,則只能重新改變陣列最後一維的大小,而不能改變維數的數目。舉例來說,如果陣列只有一維,則可以改變此維的大小,因為它是最後且唯一的一維。然而,如果陣列有二維以上,則只能改變最後一維的大小,且仍然可以保留陣列的內容。下面的例子表示可以增加動態陣列最後一維的大小,且不必刪除陣列裏原有的資料。

    ReDim X(10, 10, 10)
    . . .
    ReDim Preserve X(10, 10, 15)
    

     

    2008年7月2日 下午 03:05
    版主
  • 就是3*2只能重新宣告成3*10 不能10*3就對了?

    有辦法3*2重新宣告成10*2嗎?

    2008年7月2日 下午 03:09
  • 所以:

    1. 反過來,用 2*3 變成 2*10

    2. 用不規則陣列,不規則陣列各維度實際上是獨立的,所以各維度都可以任意變動,但相對應的子維度都要重新宣告。

    2008年7月2日 下午 03:11
    版主
  • 恩 謝謝你~

    2008年7月2日 下午 03:13