none
新增imagelist 影像產生索引在陣列之外的錯誤 RRS feed

  • 問題

  • imagelist 內已經有一些圖片,但當我再新增圖片後,執行程式就會產生索引在陣列界線外的錯誤

     

    錯誤訊息如後所附

     

    我的畫面有兩個imagelist,因為第一個imagelist 新增到第24張圖片後程式就錯誤,只好在增加一個imagelist2

    imagelist 目前有5張圖片,新增到第六張圖片後, 表單語系是預設時, 可以正確載入表單,當切換成 另一個語系就無法將該frm 讀到畫面,我必須試著讀入 表單的 design.vb  手動去把新增的imagelist2上那張圖片的程式碼給刪除

    才可以恢復正常

    我不清楚 imagelist 跟我做多國語系的程式介面是否有關聯

     

    還有當我做重建時,會有兩個警告訊息

     

    介面 IPrnVBAPrintDocument 標記為[dual],但不是從IDispatch衍生。將當做IUnkwn-derived的介面進行轉換。

    我不知道上面imagelist 的問題是否也是這問題所影響的

     

    請各位先進幫忙釋疑。

    謝謝

     

     

    錯誤訊息

    System.InvalidOperationException 未處理
      Message="建立表單時發生錯誤。如需詳細資訊,請參閱 Exception.InnerException。錯誤是: 索引在陣列的界限之外。"
      Source="DrawStarX3"
      StackTrace:
           於 DrawStar.My.MyProject.MyForms.Create__Instance__[T](T Instance) 於 17d14f5c-a337-4978-8281-53493378c1071.vb: 行 190
           於 DrawStar.My.MyProject.MyForms.get_StarUp_frm()
           於 DrawStar.My.MyApplication.OnCreateMainForm() 於 D:\My Documents\DrawStarX3\Project1.NET\My Project\Application.Designer.vb: 行 35
           於 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
           於 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
           於 Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
           於 DrawStar.My.MyApplication.Main(String[] Args) 於 17d14f5c-a337-4978-8281-53493378c1071.vb: 行 81
           於 System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           於 System.AppDomain.nExecuteAssembly(Assembly assembly, String[] args)
           於 System.Runtime.Hosting.ManifestRunner.Run(Boolean checkAptModel)
           於 System.Runtime.Hosting.ManifestRunner.ExecuteAsAssembly()
           於 System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext, String[] activationCustomData)
           於 System.Runtime.Hosting.ApplicationActivator.CreateInstance(ActivationContext activationContext)
           於 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssemblyDebugInZone()
           於 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           於 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           於 System.Threading.ThreadHelper.ThreadStart()

     

     

    當我是著加入一張影像,然後要切換到不同語系的畫面時,無法載入該表單的到編輯器內顯示

    出現

     

    載入設計工具時發生一或多個錯誤。錯誤列示如下。部分錯誤可以藉由重建專案來修復,但其他錯誤可能需要變更程式碼才行。

    指定的引數超出有效值的範圍。參數名稱: '7' 不是 'index' 的有效值。

    隱藏    

    於 System.Windows.Forms.Design.ImageListDesigner.OriginalImageCollection.get_Item(Int32 index)
    於 System.Windows.Forms.Design.ImageListDesigner.OriginalImageCollection.SetKeyName(Int32 index, String name)

     

    2007年9月30日 上午 02:33

解答

  •  

    解決了imagelist2 的問題

     

    我把imagelist2 給刪了 重新建立一個也不行

    一樣讀到第六張圖時會出問題

    於是我想 當改變物件名稱時 VB 會把有用到該名稱的程式碼自動改成新名稱

    那麼我如果換個名稱 , 有問題的程式碼是否 VB 就不會去改變他

    這樣或許可以修復這個問題

     

    果然

    當我把Imagelist2 改成 imagelist3 後

     

    這個問題就解決了

     

    2007年9月30日 上午 03:14

所有回覆

  •  

    解決了imagelist2 的問題

     

    我把imagelist2 給刪了 重新建立一個也不行

    一樣讀到第六張圖時會出問題

    於是我想 當改變物件名稱時 VB 會把有用到該名稱的程式碼自動改成新名稱

    那麼我如果換個名稱 , 有問題的程式碼是否 VB 就不會去改變他

    這樣或許可以修復這個問題

     

    果然

    當我把Imagelist2 改成 imagelist3 後

     

    這個問題就解決了

     

    2007年9月30日 上午 03:14
  • 你說的這種情形比較容易發生在 VB2003 升級到 VB2005 上,在 Form1.vb / Form1.Designer.vb 同時混雜了多個元件。

     

    若你是這類情形,建議你開個新的 Form 來處理,等整個程式碼剪貼過去後,再移除舊的 Form ,比較乾淨與保險。

     

    另外要注意變數名要避免與相同命名空間下的關鍵字相同,或是減少 Imports 的使用,改用全名來處理。

     

    2007年9月30日 上午 08:14
    版主
  •  

    感謝
    2007年9月30日 上午 11:10
  • 我也只是猜的,我不確定你的問題是否是這樣。

     

    先前碰過好幾次升級專案有這種狀況,所以猜可能是這樣...

    2007年9月30日 上午 11:13
    版主
  •  

    謝謝

    我是有些新功能不是很清楚,只好回vb6 寫好程式 再用升級程式轉到vb2005,然後再研究語法

     

    顯然這樣問題很多。

     

    這個程式只有一個表單是從升級程式轉過來, 其他表單就都是重新建立的

    錯誤訊息只顯示專案名稱 沒顯示是那個表單,所以也不清楚是那邊的問題

    但大體上 解決 imagelist 的問題後 , 建制 發行測試都沒問題, 那兩個警告 只好先暫時忽略。

     

    2007年9月30日 上午 11:19
  • ...

    依照我的經驗是千萬不要這樣做。

     

    VB6 升級到 VB2005 的工具雖然改善很多,但是還有太多隱藏性問題,因為兩者設計核心觀念不同,升級上來的程式頂多改語法,而且還不見得相容,而邏輯是完全不能改的。

     

    花個半個月讓你的核心完全由 .Net 出發,是必要的成本,否則你後面出的問題會更多,到時候因為維護需求要全面大改時會更慘。

     

    當然小東西是影響不大啦,比如說 Label / TextBox 這種,但是整個 VBNET 的事件已經跟 VB6 完全不同了,手動重寫是最保險的。

    2007年9月30日 上午 11:24
    版主
  •  

    是阿

    現在對這點有深深的體會

     

    後面的工作還真的很多.....

     

    2007年9月30日 上午 11:27