我迫切需要帮助我正在制作的游戏。对于一些上下文,我正在制作一个记忆游戏,我有以下一段代码很麻烦。我在表单上有一堆标签,确切地说是16,每个标签中放置一个随机生成的符号。每个符号在标签中出现两次。
------------------------------Continued----------------------------------------
'MsgBox("hello") 'used to check if the second inccorect press shows up - it does show but instantly changes colour
'''''''''''''''''NEED SOME CODE THAT PAUSES IT HERE'''''''''''''''
labels(0).ForeColor = Color.DarkRed
sender.ForeColor = Color.DarkRed
End If
flips = 1
End If
End If
tmrmemory.Enabled = True ' starts the timer after the user clicks the first label
End Sub
应该发生的事情是,当点击的标签不匹配时,它应该在短时间内显示所点击的标签,然后再将它们更改回" DarkRed"这是形式背景的颜色。
我尝试过使用计时器但我不能使用sender.forecolor=color.darkred
,因为它没有全局声明。
我也尝试使用命令Threading.Thread.Sleep(500)
,但它仍然没有显示第二次错误点击。我知道我使用的代码是有效的,因为当我使用消息框时,我可以看到两个符号,当两次点击都正确时,它会保留。
答案 0 :(得分:1)
Threading.Thread.Sleep(500)
实际上会暂停你的代码半秒钟。但是在这段时间内它不会做任何事情,甚至不会刷新你的控件。要获得所需的效果,您需要在调用YourControl.Refresh
之前调用Threading.Thread.Sleep
方法以强制控件立即重绘。
另外,我建议你不要在UI线程上调用Threading.Thread.Sleep
。它会给程序挂起感觉。而是在一个单独的线程上工作。您可以自己创建一个单独的线程来销毁它,也可以使用具有内置所有功能的BackgroundWorker
控件。
以下是我很久以前写过的关于BackgroundWorker的文章的链接,它可能对您有用:
http://www.vbforums.com/showthread.php?680130-Correct-way-to-use-the-BackgroundWorker
答案 1 :(得分:0)
在sub之外声明一个变量,用于存储定时器结束时应该翻转的标签。
标签点击集
storedLabel = sender
计时器勾选设置storedLabel.ForeColor = Color.DarkRed