양식에 YourCard1.Text, YourCard2.Text, YourCard3.Text 등의 레이블이 있다고 가정하면이 함수가 유용 할 것입니다. Text 속성이 아닌 Label 자체를 반환합니다.
Private Function card(index As Integer) As Label
Try
Return Me.Controls.
OfType(Of Label).
Where(Function(l) l.Name = "YourCard" & index.ToString()).
Single()
Catch
Return Nothing
End Try
End Function
참고 : Me.Controls
직접 폼 내부의 컨트롤을 반환하지만 형태로 용기 내부에 컨트롤을 반환하지 않습니다. 당신의 카드는 패널 내부에있는 경우, Panel1
예를 들어, 당신은 Return Panel1.Controls.OfType(Of Label)...
사용 할 것 : 코멘트를 해결하기 위해
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
card(1).Text = "Hello"
card(2).Text = "World"
End Sub
편집을.
당신은 그 의미론에주의를 기울입니다. 그래서 제가 생각할 수있는 또 다른 방법이 있습니다. 그러나 저는 개인적으로 그렇게하지 않을 것입니다. 너무 복잡
Public Class Form1
Private Class cardClass
Private myContainer As Control
Sub New(container As Control)
myContainer = container
End Sub
Default Public WriteOnly Property Item(ByVal index As Long) As String
Set(value As String)
card(index).Text = value
End Set
End Property
Private Function card(index As Integer) As Label
Try
Return myContainer.Controls.
OfType(Of Label).
Where(Function(l) l.Name = "YourCard" & index.ToString()).
Single()
Catch
Return Nothing
End Try
End Function
End Class
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim card As New cardClass(Me)
card(1) = "Hello"
card(2) = "World"
End Sub
End Class
이유 문자열 참조 형식이더라도,이 값 유형을 사용한다는 의미이다. 따라서 함수에서 문자열을 반환 할 때 원래 메모리 위치를 다시 참조 할 수 없습니다. 실제로 문자열의 복사본을 만듭니다. 그래서 함수 의미를 사용하는 것은 작동하지 않습니다. 같은 배열에 갈 것입니다. 함수 나 배열에서 문자열을 수정하고 Label의 Text 속성을 수정하는 것은 어렵습니다 (불가능합니까?).
출처
2016-10-14 17:46:45
djv
'card'가 레이블 배열 인 경우'card (n) .Text'가 작동합니다 – Plutonix
올바른 방법은 Card라는 클래스를 만들고 카드 목록을 만드는 것입니다. 그런 다음 카드가 변경 될 때마다 해당 라벨을 업데이트하도록 UI에 경고합니다. 실제로 UI에 정보를 실제로 저장하는 것은 좋지 않습니다. – djv