VB WinForm复选框输出格式与性别代词等问题技术求助
Visual Basic WinForm 问题解决方案
输入验证(姓名+年龄)
- 姓名验证:用正则表达式检查是否仅包含字母(支持空格,适配全名场景),同时确保非空
- 年龄验证:校验是否为1-99之间的有效整数,排除空值和非法数字
示例代码片段:
Dim errors As New List(Of String) ' 姓名验证 If String.IsNullOrWhiteSpace(txtName.Text) Then errors.Add("姓名不能为空") ElseIf Not System.Text.RegularExpressions.Regex.IsMatch(txtName.Text, "^[a-zA-Z\s]+$") Then errors.Add("姓名仅允许输入字母和空格") End If ' 年龄验证 Dim age As Integer If String.IsNullOrWhiteSpace(txtAge.Text) Then errors.Add("年龄不能为空") ElseIf Not Integer.TryParse(txtAge.Text, age) OrElse age < 1 OrElse age > 99 Then errors.Add("年龄必须是1-99之间的整数") End If
性别代词动态匹配
通过单选按钮选中状态,定义对应主格、所有格代词,输出时直接引用:
示例代码片段:
Dim subjectPronoun As String = "" Dim possessivePronoun As String = "" If rdoMale.Checked Then subjectPronoun = "He" possessivePronoun = "His" ElseIf rdoFemale.Checked Then subjectPronoun = "She" possessivePronoun = "Her" Else errors.Add("请选择性别") End If
输出示例:
Dim output As String = $"{txtName.Text} is {age} years old. {subjectPronoun} is taking {cboCourse.Text}. {possessivePronoun} favorite sports are {GetFormattedSports()}. {subjectPronoun} plays at {cboSkillLevel.Text} level."
多选Checkbox 格式生成
编写专用函数处理选中项,根据数量自动适配逗号、and、句号的组合规则:
Private Function GetFormattedSports() As String Dim selectedSports As New List(Of String) ' 替换为你的实际运动Checkbox控件名 If chkFootball.Checked Then selectedSports.Add("Football") If chkBasketball.Checked Then selectedSports.Add("Basketball") If chkSwimming.Checked Then selectedSports.Add("Swimming") Select Case selectedSports.Count Case 0 Return "no sports specified." Case 1 Return $"{selectedSports(0)}." Case 2 Return $"{selectedSports(0)} and {selectedSports(1)}." Case Else Dim prefix As String = String.Join(", ", selectedSports.Take(selectedSports.Count - 1)) Return $"{prefix}, and {selectedSports.Last()}." End Select End Function
合并错误提示到单个MessageBox
收集所有验证错误,统一弹出提示:
If errors.Count > 0 Then MessageBox.Show(String.Join(vbCrLf, errors), "输入错误", MessageBoxButtons.OK, MessageBoxIcon.Error) Return ' 终止后续逻辑执行 End If
完整按钮点击事件示例
Private Sub btnGenerate_Click(sender As Object, e As EventArgs) Handles btnGenerate.Click Dim errors As New List(Of String) Dim subjectPronoun As String = "" Dim possessivePronoun As String = "" Dim age As Integer ' 输入验证环节 ' 姓名验证 If String.IsNullOrWhiteSpace(txtName.Text) Then errors.Add("姓名不能为空") ElseIf Not System.Text.RegularExpressions.Regex.IsMatch(txtName.Text, "^[a-zA-Z\s]+$") Then errors.Add("姓名仅允许输入字母和空格") End If ' 年龄验证 If String.IsNullOrWhiteSpace(txtAge.Text) Then errors.Add("年龄不能为空") ElseIf Not Integer.TryParse(txtAge.Text, age) OrElse age < 1 OrElse age > 99 Then errors.Add("年龄必须是1-99之间的整数") End If ' 性别验证 If rdoMale.Checked Then subjectPronoun = "He" possessivePronoun = "His" ElseIf rdoFemale.Checked Then subjectPronoun = "She" possessivePronoun = "Her" Else errors.Add("请选择性别") End If ' 课程选择验证(按需添加) If cboCourse.SelectedIndex = -1 Then errors.Add("请选择课程") End If ' 运动水平验证(按需添加) If cboSkillLevel.SelectedIndex = -1 Then errors.Add("请选择运动水平") End If ' 错误提示合并弹出 If errors.Count > 0 Then MessageBox.Show(String.Join(vbCrLf, errors), "输入错误", MessageBoxButtons.OK, MessageBoxIcon.Error) Return End If ' 生成格式化输出 Dim sportsText As String = GetFormattedSports() Dim output As String = $"{txtName.Text} is {age} years old. {subjectPronoun} is enrolled in {cboCourse.Text}. {possessivePronoun} preferred sports are {sportsText} {subjectPronoun} competes at the {cboSkillLevel.Text} level." ' 将结果输出到指定控件(示例为txtOutput文本框) txtOutput.Text = output End Sub Private Function GetFormattedSports() As String Dim selectedSports As New List(Of String) ' 替换为你的实际Checkbox控件名 If chkFootball.Checked Then selectedSports.Add("Football") If chkBasketball.Checked Then selectedSports.Add("Basketball") If chkSwimming.Checked Then selectedSports.Add("Swimming") If chkRunning.Checked Then selectedSports.Add("Running") Select Case selectedSports.Count Case 0 Return "none specified." Case 1 Return $"{selectedSports(0)}." Case 2 Return $"{selectedSports(0)} and {selectedSports(1)}." Case Else Dim prefix As String = String.Join(", ", selectedSports.Take(selectedSports.Count - 1)) Return $"{prefix}, and {selectedSports.Last()}." End Select End Function
内容的提问来源于stack exchange,提问作者Taufiq Jusoff
相关产品推荐
相关产品推荐

