2013-02-09 5 views
0

Im пытается написать программу в VB.net для торговой системы. Он будет читать базу данных и заполнять элементы в форме. Приложение отображает информацию, такую ​​как имя продукта и т. Д. В ярлыках, внутри прокручиваемой панели. Im создает объекты и назначает такие значения, как текст во время выполнения. Я использую цикл для кода.control array vb.net

Если я использовал vb 6, у меня был бы массив управления, а с помощью индекса и моего счетчика отображались данные. Поскольку я делаю это в vb.net, у меня нет способа это сделать .. Любые решения?

+0

Я могу только рекомендовать спусков в .NET Framework библиотеки. .NET намного больше, чем библиотеки VB6. То, что вы хотите, находится там; его просто называют по-разному, и к нему нужно подходить по-разному. –

+0

Почему у вас нет способа сделать это? Являются ли массивы больше не поддерживаются в VB? Другим вариантом может быть «List » class: http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx – David

+0

Кроме того, VB.NET - это другой язык, чем VB6, а не другая версия того же язык. –

ответ

5

VB.NET не поддерживает контрольные массивы в том же смысле, что и VB6. Однако вы можете делать похожие вещи. Например, если вы хотите обрабатывать события из нескольких элементов управления с тем же способом, что вы можете сделать так, как это:

Private Sub MyClickHandler(sender As Object, e As EventArgs) Handles _ 
    Button1.Click, _ 
    Button2.Click, _ 
    Button3.Click 

    Dim buttonThatWasClicked As Button = CType(sender, Button) 
    ' Do something... 
End Sub 

Если вы хотите создать массив элементов управления, которые вы можете перебрать, вы можете сделать это чтобы, как это:

Dim myTextBoxes() As TextBox = New TextBox() { TextBox1, TextBox2, TextBox3 } 
For i As Integer = 0 to myTextBoxes.Length - 1 
    myTextBoxes(i).Text = ... 
Next 

в качестве альтернативы, если вы называете элементы управления последовательно, вы можете найти их по имени в Controls коллекции вашей формы. Например, если вы три текстовых поля с именем TextBox1, TextBox2 и TextBox3, вы могли бы цикл через них, как это:

For i As Integer = 1 to 3 
    Dim t As TextBox = CType(Me.Controls("TextBox" & i.ToString()), TextBox) 
    t.Text = ... 
Next 
2

VB.NET не имеет управляющих массивов как таковых.

Однако вы можете создать массив элементов управления и назначить элементы управления каждому элементу массива, хотя вы также можете использовать List(Of Control).

Это позволит вам перемещаться по коллекции.

1

В VB.NET нет управляющих массивов. Но вы можете перебирать Panel.Controls. Все элементы управления находятся в этой коллекции (если все они находятся на одной панели).

For i = 0 To Panel1.Controls.Count - 1 

     Dim control = Panel1.Controls(i) 

     'Do something with control.. 

    Next 
1

Во-первых есть причина, почему вы не можете использовать сетку для этого? - это было бы очевидным решением (как и в VB6).

ETA. , но если это необходимо, этот фрагмент кода добавит набор меток в вашу форму. Вам нужно будет изменить это, например, заменить на следующий цикл с для каждого г, как mydataset.mytabledatarow в mydataset.mydatable и т.д. и т.п.

For i = 1 To 10 
     Dim l As New Label 
     l.Location = New System.Drawing.Point With {.x = 10, .y = i * 30} 
     Me.Controls.Add(l) 
     l.Text = "test " & i.ToString 
    Next 
+0

+1. Использование сетки должно быть принято. – Neolisk