【发布时间】:2016-12-13 02:07:43
【问题描述】:
有没有办法在Userform_Initialize 子之外的UserForm 上更新ListBox?
为什么?
我正在构建一个二十一点游戏并使用列表框来告诉用户他们有什么牌/庄家有什么牌。我希望使用一个简单的子 (ShowCards) 将项目添加到列表框中,但我遇到了问题:
Play 按钮调用位于普通模块中的 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.Repaint 没有运气。
所以如果真的没有其他办法,我应该将userHand 和dealerHand 声明为全局变量,更新它们并调用Useform_Initialize 来获取更新的值并将它们显示给用户吗?考虑到游戏的性质是可以为两个玩家发多张牌,因此在每场游戏中多次重新初始化用户窗体似乎是不明智的。
欢迎所有建议。如果您认为我应该以完全不同的方式来做,我仍然很想听听(但对工作表解决方案不太感兴趣)
更新 #1 为清楚起见,ShowGame 由工作表上的按钮调用,然后 PlayBlackjack 由 Userform 上的 Play 按钮调用(在 userform 代码中没有其他内容)
【问题讨论】:
-
它会是 me.userhandlist