2011-04-21 69 views
4

控制數組是否支持.Net?我們正在討論將舊版應用程序從VB6轉換爲.Net。該應用程序有很多控制數組。我讀過不同的文章,如果.Net支持控制數組。vb6控制數組.net?

誰能給我一個明確的答案,如果.NET支持控件數組像VB6呢?這是最新版本的.Net 4.0嗎?還是有版本限制?

此外,如果這是可能是直的轉換?如果不是什麼火焰箍將不得不跳過來做到這一點?

謝謝!

+0

又見這些近重複http://stackoverflow.com/questions/5497403/control-array-in-vb-net和http://stackoverflow.com/questions/5497403/control-array-in-vb- net – MarkJ 2011-04-21 11:30:31

+0

VB6 - > VB.Net很少是一個直接的轉換,有很多討論[vb6-migration'標籤](http://stackoverflow.com/questions/tagged/vb6-migration) 。你可能希望訂購一些阻燃內衣之前接近箍(或閱讀一些職位):( – MarkJ 2011-04-21 11:44:22

+0

可能重複[什麼是最簡單的.NET等效VB6控制數組?](http://stackoverflow.com /問題/ 39541 /什麼最簡單的淨等價的-A-VB6控制陣列) – raven 2013-10-23 18:34:27

回答

2

「直轉換」是不可能的,但你可以用不同的方式創建控件數組:Creating Control Arrays in Visual Basic .NET and Visual C# .NET

+0

我注意到這篇文章是寫在'03。我可以想象4.0支持這個呢? – webdad3 2011-04-21 00:28:05

+0

@Jeff V是的...... – 2011-04-21 00:28:30

+1

+1這是一篇很好的文章,現在是2011年,一個明顯的改進是使用泛型,而不是爲每個控件類型創建一個新類,可能會有一個泛型類做大部分的驢工作,或許可以有一個通用的'BaseControlArray(Of T)',它繼承'List(Of T)',而不是像文章中的'CollectionBase'。然後'ButtonArray'將繼承'BaseControlArray(Of Button)'並公開這些事件,這些事件將根據控件的類型而有所不同。 – MarkJ 2011-04-21 11:36:14

1

你可以有控件數組,但它們並不像內置的控件數組是在VB6。但是,您可以創建控件數組或具有與vb6類似的統一事件處理程序。

2

VB.NET控件數組沒有問題。唯一缺少的是設計師不支持他們。輕鬆解決代碼問題。像這樣:

Public Class Form1 
    Private TextBoxArray() As TextBox 

    Public Sub New() 
     InitializeComponent() 
     TextBoxArray = New TextBox() { TextBox1, TextBox2, TextBox3 } 
    End Sub 

End Class 
+1

只有部分難題。 OP將需要統一的事件處理程序。 – MarkJ 2011-04-21 06:19:47

0

我想我找到了解決方案,我不是唯一一個曾經在這個限制中掙扎過的VB6開發者。很久以前,我試圖遷移一個軟件,但是我失敗了,因爲它對控制陣列有很強的依賴性。我看了很多論壇,我能寫簡單的代碼:

Public Class Form1 

'To declare the List of controls 
Dim labels As New List(Of Label)() 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    'To get all controls in the form 
    For Each control In Me.Controls 
     'To search for the specific type that you want to create the array 
     If control.[GetType]().Name.Contains("Label") Then 
      'To add the control to the List 
      labels.Add(DirectCast(control, Label)) 
     End If 
    Next 
    'To sort the labels by the ID 
    labels = labels.OrderBy(Function(x) x.Name).ToList() 
End Sub 
End Class 

我用方便的原因清單,但與代碼,你可以在設計時創建,你需要同時您保持「的控制指數」作爲最後一個字符(標籤,標籤,...,標籤ñ

Many labels in a window form

以後,你可以用迭代循環和他們在俄式添加它們一隻眼睛的k。接下來,您將能夠使用標籤(0),標籤(1)等對象操作它們。

我希望這段代碼能夠幫助更多的程序員在未來。