问题描述
我正在尝试在登录表单中引导用户。
如果用户点击 Yes
并输入了昵称,则下一个表单将启动,当前表单将关闭。
如果他们在未输入昵称的情况下选择 Yes
,则会出现一条消息,告知用户名丢失且不显示其他表单。
这是我想出的代码:
Public Sub BttPlay_Click(sender As Object,e As EventArgs) Handles BttPlay.Click
Select Case MsgBox("The game is going to start,are you ready?",MessageBoxButtons.YesNo) And TxtUsername.Text = ""
Case DialogResult.Yes And TxtUsername.Text <> ""
nivel1.Show()
Me.Close()
Case DialogResult.Yes And TxtUsername.Text = ""
MsgBox("You must write your username",MessageBoxButtons.OK)
Case DialogResult.No
Me.Show()
End Select
Me.Refresh()
End Sub
问题在于,无论是否已输入昵称,它都会显示输入昵称的消息。我做错了什么?
解决方法
如果用户没有输入姓名,程序将无法继续,请先检查此条件,如果不满足此条件,则通知并返回。
然后询问用户是否要开始新游戏(可能是多余的,因为用户已经输入了名称并按下了按钮)。
如果用户回答 No
,那么你得到 DialogResult.No
结果,只是 Return
,这里没有其他事情可做。
否则,显示 nivel1
表单并最终关闭当前表单(请参阅页脚注释):
Public Sub BttPlay_Click(sender As Object,e As EventArgs) Handles BttPlay.Click
If TxtUsername.TextLength = 0 Then
MessageBox.Show("Please,name","Name")
Return
End If
If MessageBox.Show("Start?","New Game",MessageBoxButtons.YesNo) = DialogResult.No Then Return
nivel1.Show()
Me.Close()
End Sub
如果由于某种原因需要使用 Select Case
,可以使用 MessageBox 的结果作为选择器。由于您可能只对肯定的结果感兴趣,您可以先检查该案例,然后将其余的留给 Case Else
(因为只有两种可能的案例):
Public Sub BttPlay_Click(sender As Object,e As EventArgs) Handles BttPlay.Click
If txtDescription.TextLength = 0 Then
MessageBox.Show("Please,"Name")
Return
End If
Select Case MessageBox.Show("Start?",MessageBoxButtons.YesNo)
Case DialogResult.Yes
nivel1.Show()
Me.Close()
Case Else
' NOP - It will just exit this method
' Me.Show() is not required,since Me is already shown
End Select
End Sub
请注意,如果 Me
是起始表单,则 Me.Close()
将结束程序。
您可能不想在此处关闭程序,因此请确保将 Shutdown mode
中的 Project->Properties->Application
选项设置为 When last Form closes
。
您可以使用 Me.Hide()
作为替代。
由于您正在学习语言,我建议从一开始就设置 Option Strict On
。它将帮助您避免编写大量代码后难以发现的错误。
Visual Studio、调试器和 Intellisense 都将帮助找出代码的问题,并建议如何修复它。
您可以设置此选项 On
(以及其他相关选项),
使用 Visual Studio 常规选项对话框。
在 TOOLS
菜单中,请参阅:Options->Projects and Solutions->VB Defaults
并将所有设置为 On
。
根本问题是 Select Case
仅适用于评估单个变量的条件。如果您想考虑另一个变量的条件,则不能使用 Select Case
并且必须回退到 If
-Then
/ ElseIf
-Then
/ Else
。
为了让您的代码按编写的方式工作(抛开 Jimi 建议的重新设计),您可以执行以下操作:
Dim response = MessageBox.Show(...)
If response = MessageBoxResult.Yes AndAlso TxtUserName.Text <> "" Then
'...
ElseIf response = MessageBoxResult.Yes AndAlso TxtUserName.Text = "" Then
'...
ElseIf response = MessageBoxResult.No Then
'...
End If