有没有办法更新ListBox
子网之外的UserForm
上的Userform_Initialize
?
为什么吗
我正在建立一个二十一点游戏,并使用列表框告诉用户他们拥有哪些卡/经销商。我希望使用一个简单的子(ShowCards
)将项目添加到列表框中,但我遇到了问题:
播放按钮调用位于普通模块中的 PlayBlackjack 子
Option Explicit
Dim cards As New Collection
Sub ShowGame()
UFDisplay.Show
End Sub
Sub PlayBlackjack()
'fill the cards collection with 5 shuffled decks
PrepareCards
Dim i As Integer
Dim userHand As New Collection
Dim dealerHand As New Collection
'deal cards (removing the dealt cards from the cards collection)
For i = 1 To 2
DealCard cards, userHand
DealCard cards, dealerHand
Next i
ShowCards userHand, UFDisplay.UserHandList <-- ERROR HERE (Type mismatch)
'more code to follow
End Sub
Private Sub ShowCards(hand As Collection, list As ListBox)
Dim i As Integer
For i = 1 To hand.Count
list.AddItem hand(i).CardName
Next i
End Sub
如果您认为自己需要更多代码,请告诉我们。 hand
是卡片类的集合,其中.CardName
返回3 of Hearts
我读到的所有东西似乎告诉我初始化后userform是静态的,所以我需要在添加新项目后以某种方式刷新它。我试了Userform.Repaint
没有运气。
因此,如果没有其他方法,我应该将userHand
和dealerHand
声明为全局变量,更新它们并调用Useform_Initialize
以获取更新的值并将其显示给用户?鉴于游戏的性质是可以为两个玩家发出多张牌,因此每次游戏多次重新初始化用户形态似乎不合理。
欢迎所有建议。如果您认为我应该完全采用不同的方式,我仍然希望听到(但对工作表解决方案不感兴趣)
更新#1 为清楚起见,ShowGame由workhet上的按钮调用,然后从Userform上的Play按钮调用PlayBlackjack(userform代码中没有其他内容)
答案 0 :(得分:3)
您也可以为手使用类,并将类列表框设置为表单列表框,例如,类clsHand
Public colHand As collection
Public lstToUpdate As MSForms.ListBox
Private Sub Class_Initialize()
Set colHand = New collection
End Sub
Friend Function AddCard(card As clsCard)
colHand.Add card, CStr(colHand.Count)
If Not lstToUpdate Is Nothing Then
lstToUpdate.AddItem card.strCardName
End If
End Function
它以表格形式使用
Private clsPlayerHand As clsHand
Private Sub UserForm_Initialize()
Set clsPlayerHand = New clsHand
Set clsPlayerHand.lstToUpdate = Me.ListBox1
End Sub
Private Sub CommandButton1_Click()
Dim clsC As New clsCard
clsC.strCardName = "one"
clsPlayerHand.AddCard clsC
End Sub
编辑:推荐,
使用卡片的数字和套装名称,然后你可以执行以下操作,比如启用分割按钮,顺便说一句,你要使用一组手然后arrHands(x)......
Public colHand As collection
Public lstToUpdate As MSForms.ListBox
Public cmdSplitButton As MSForms.CommandButton
Private Sub Class_Initialize()
Set colHand = New collection
End Sub
Friend Function AddCard(card As clsCard)
colHand.Add card, CStr(colHand.Count)
If Not lstToUpdate Is Nothing Then
lstToUpdate.AddItem card.CardName
End If
If Not cmdSplitButton Is Nothing Then
If colHand.Count = 2 Then _
cmdSplitButton.Enabled = colHand(1).NumericPart = colHand(2).NumericPart
End If
End Function
考虑使用课程充分发挥潜力,同时观察事件,对某些事情做出反应。
答案 1 :(得分:3)
navigationController?.popToRootViewControllerAnimated(true)
子的签名更改为:
ShowCards