VB.NET程序InputBox取消关闭、空输入提示返回问题及代码优化请求
VB程序姓名输入逻辑修正方案
你的需求是启动程序时弹出姓名输入框,实现以下逻辑:点击「取消」关闭程序;点击「确定」但输入为空(含全空格)时,提示「Please enter your name to play」并重新输入;输入有效则设置窗口标题为问候语。
原代码存在一个关键问题:VB的原生InputBox无法区分「点击取消」和「点击确定但输入为空」的情况——两种操作都会返回空字符串,导致原代码会把「确定空输入」误判为「取消」直接退出程序,不符合你的需求。下面提供两种解决方案:
方案一:自定义输入对话框(推荐,完美实现需求)
创建一个新的Windows Form作为输入窗口(命名为dlgNameInput),添加以下控件:
TextBox控件(命名为txtFullName)Button控件(命名为btnOK,Text设为「确定」)Button控件(命名为btnCancel,Text设为「取消」)
然后在主窗体frmMenu的Load事件中调用这个自定义对话框,代码如下:
Private Sub frmMenu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim strUser As String = String.Empty Do While String.IsNullOrEmpty(strUser) Using inputDialog As New dlgNameInput() Dim result As DialogResult = inputDialog.ShowDialog() ' 点击取消按钮,关闭程序 If result = DialogResult.Cancel Then MessageBox.Show("已取消操作,程序即将关闭。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) Application.Exit() Return End If ' 获取输入内容并去除首尾空格 Dim inputName As String = inputDialog.txtFullName.Text.Trim() ' 输入为空,提示并重新输入 If String.IsNullOrEmpty(inputName) Then MessageBox.Show("Please enter your name to play", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error) Else ' 输入有效,赋值并退出循环 strUser = inputName End If End Using Loop ' 设置窗口标题 Me.Text = "Hello, " & strUser End Sub
同时在自定义对话框dlgNameInput中添加按钮的点击事件代码:
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click Me.DialogResult = DialogResult.OK Me.Close() End Sub Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click Me.DialogResult = DialogResult.Cancel Me.Close() End Sub
方案二:基于InputBox的折中实现(无法完美区分,仅作备选)
如果一定要用原生InputBox,只能通过提示用户配合来折中处理,代码修正如下:
Private Sub frmMenu_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim strUser As String = String.Empty Do While String.IsNullOrEmpty(strUser) Dim fullName As String = InputBox("请输入你的姓名(取消请点Cancel):", "身份验证") ' 先判断输入是否为全空格或空 Dim trimmedName As String = fullName?.Trim() If String.IsNullOrEmpty(trimmedName) Then ' 提示用户输入有效内容 MessageBox.Show("Please enter your name to play", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error) Else ' 输入有效,赋值并退出循环 strUser = fullName End If ' 注:此方案无法完美识别「点击Cancel直接关闭程序」的操作,因为InputBox返回的空字符串无法和空输入区分 Loop Me.Text = "Hello, " & strUser End Sub
注:方案二的局限性在于无法准确识别用户点击Cancel的操作,只能通过提示用户配合,因此更推荐使用方案一的自定义对话框。
内容的提问来源于stack exchange,提问作者Gabriel Cote-Vallee
相关产品推荐
相关产品推荐

