全部!我正在开发一款BlackJack游戏,但我遇到了一些问题。在计算分数时,我必须输入YourCard1.Text,YourCard2.Text,YourCard3.Text等。 我可以在每次调用时都创建一个正确标签的函数吗?我想这样做,所以我不必输入太多...通过函数获取标签
例如,而不是输入“YourCard1.Text”,我希望能够键入“卡(1)”是这样的可能?我已经尝试了多种方式来做到这一点,但无济于事。我无法弄清楚如何使它工作。
全部!我正在开发一款BlackJack游戏,但我遇到了一些问题。在计算分数时,我必须输入YourCard1.Text,YourCard2.Text,YourCard3.Text等。 我可以在每次调用时都创建一个正确标签的函数吗?我想这样做,所以我不必输入太多...通过函数获取标签
例如,而不是输入“YourCard1.Text”,我希望能够键入“卡(1)”是这样的可能?我已经尝试了多种方式来做到这一点,但无济于事。我无法弄清楚如何使它工作。
假设你的表单上有这些标签,YourCard1.Text,YourCard2.Text,YourCard3.Text等,这个函数应该适合你。它返回标签本身,而不是Text属性。
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
它很复杂的原因是虽然String是一个引用类型,但它使用值类型语义。所以当从一个函数返回一个字符串时,它不能引用回原始的内存位置:它实际上会创建一个字符串的副本。所以使用函数语义是行不通的。数组也一样。从函数或数组中修改一个字符串并修改Label的Text属性是很困难的(不可能?)。
啊,我明白了。比我想象的要复杂一点。 – rsprodftw1
会有一种方法可以进一步缩短它吗?所以我不必每次输入“.Text”? – rsprodftw1
我看到你用过我的方法http://stackoverflow.com/questions/40050468/blackjack-wont-add-dealers-手,请将此标记为答案 – djv
如果'card'是一组标签,'card(n).Text'可以工作 – Plutonix
正确的做法是创建一个名为Card的类并拥有一张卡片列表。然后每次更换卡时,都会提醒用户界面更新相应的标签。在UI上实际存储信息通常不是一个好主意。 – djv