You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:10:32