あなたのフォームに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
は直接フォーム内のコントロールを返しますが、フォームでコンテナ内のコントロールを返しません。アドレスコメントに
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
card(1).Text = "Hello"
card(2).Text = "World"
End Sub

編集:あなたのカードは、パネルの内側にある場合は、例えばPanel1
は、あなたがReturn Panel1.Controls.OfType(Of Label)...
使い方をするでしょう。
あなたはそれらのセマンティクスだけに注意しています。だから私が考えることができる別の方法があります。しかし私は個人的にはこれをしません。
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
理由は複雑ですが、Stringは参照型ですが、値型セマンティクスを使用しています。したがって、関数から文字列を返すとき、元のメモリ位置を参照することはできません。文字列のコピーが実際に作成されます。したがって、関数のセマンティクスを使用することはできません。同じ配列に行くだろう。関数や配列から文字列を変更し、LabelのTextプロパティを変更することは難しいでしょう(不可能です)。
出典
2016-10-14 17:46:45
djv
'card'がラベルの配列だった場合、' card(n).Text'は動作します – Plutonix
これを行う正しい方法は、Cardというクラスを作り、カードのリストを作ることです。その後、カードが変更されるたびに、適切なラベルを更新するようUIに警告します。 UIに実際に情報を格納することは、通常はお勧めできません。 – djv