2013-02-09 1 views
0

나는 쇼핑 시스템을 위해 VB.net에서 프로그램을 작성하려고합니다. 데이터베이스를 통해 읽고 양식의 항목을 채 웁니다. 앱은 라벨에 제품 이름 등의 정보를 스크롤 가능한 패널 안에 표시합니다. 객체를 생성하고 런타임시 텍스트와 같은 값을 지정합니다. 코드에 루프를 사용하고 있습니다.제어 배열 vb.net

vb 6을 사용하는 경우 컨트롤 배열이 있고 인덱스와 카운터를 사용하여 데이터를 표시합니다. 이후 VB에서이 일을 메신저, 나는 그럴 수 없어 ... 모든 솔루션?

+0

각 연구에 대한과 향후 루프를 교체 수정해야합니다. .NET은 VB6에서 제공되는 라이브러리보다 훨씬 더 큽니다. 당신이 원하는 것은 거기에 있습니다. 그것은 단지 다르게 명명되었고 다르게 접근되어야합니다. –

+0

왜 그렇게 할 방법이 없습니까? 배열이 VB에서 더 이상 지원되지 않습니까? 또 다른 옵션은'List '클래스 일 수 있습니다 : 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. . 그러나 필요한 경우이 코드 스 니펫은 양식에 레이블 세트를 추가합니다. 당신은 예를 들어이 난 단지는 .NET Framework 라이브러리로 다이빙을 추천 할 수 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