VB.NET作业求助:实现magic word字符串计数与搜索功能
作业功能实现方案
第一步:补充界面控件
你需要在现有界面下半部分新增以下控件:
- 字符计数模块:
- 输入文本框:命名为
txtCountChar,用于输入待统计的字符 - 功能按钮:命名为
btnCount,按钮文本为「统计字符出现次数」 - 结果展示标签:命名为
lblCountResult,用于展示统计结果
- 输入文本框:命名为
- 搜索功能模块:
- 输入文本框:命名为
txtSearchStr,用于输入待搜索的字符串 - 功能按钮:命名为
btnSearch,按钮文本为「搜索字符串」 - 结果展示标签:命名为
lblSearchResult,用于展示搜索结果,可把AutoSize属性设为False,调整足够大小展示多行内容
- 输入文本框:命名为
第二步:新增功能代码
直接在你现有代码的End Class之前添加以下代码即可:
' 刷新按钮可用状态,满足110分档的按钮可用性要求 Private Sub RefreshButtonEnabledStatus() ' 统计按钮仅当magic word不为空、统计输入框有内容时可用 btnCount.Enabled = Not String.IsNullOrEmpty(Label3.Text) AndAlso Not String.IsNullOrEmpty(txtCountChar.Text) ' 搜索按钮仅当magic word不为空、搜索输入框有内容时可用 btnSearch.Enabled = Not String.IsNullOrEmpty(Label3.Text) AndAlso Not String.IsNullOrEmpty(txtSearchStr.Text) End Sub ' 监控输入和magic word变化,实时刷新按钮状态 Private Sub Label3_TextChanged(sender As Object, e As EventArgs) Handles Label3.TextChanged RefreshButtonEnabledStatus() End Sub Private Sub txtCountChar_TextChanged(sender As Object, e As EventArgs) Handles txtCountChar.TextChanged RefreshButtonEnabledStatus() End Sub Private Sub txtSearchStr_TextChanged(sender As Object, e As EventArgs) Handles txtSearchStr.TextChanged RefreshButtonEnabledStatus() End Sub ' 字符计数功能(满足80分档要求) Private Sub btnCount_Click(sender As Object, e As EventArgs) Handles btnCount.Click Dim targetChar As Char = txtCountChar.Text.Trim()(0) Dim magicWord As String = Label3.Text Dim appearCount As Integer = magicWord.Count(Function(c) c = targetChar) lblCountResult.Text = $"字符 '{targetChar}' 出现次数:{appearCount}" End Sub ' 搜索功能(满足90-110分档要求) Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click Dim searchStr As String = txtSearchStr.Text.Trim() Dim magicWord As String = Label3.Text Dim searchLen As Integer = searchStr.Length Dim matchCount As Integer = 0 Dim resultBuilder As New System.Text.StringBuilder() Dim startPos As Integer = 0 While startPos <= magicWord.Length - searchLen Dim matchPos As Integer = magicWord.IndexOf(searchStr, startPos) If matchPos = -1 Then Exit While matchCount += 1 ' 提取匹配位置前后最多5个字符,超出加省略号 Dim prefix As String = "" If matchPos > 0 Then prefix = If(matchPos > 5, "...", "") & magicWord.Substring(Math.Max(0, matchPos - 5), Math.Min(5, matchPos)) End If Dim suffix As String = "" Dim suffixStart As Integer = matchPos + searchLen If suffixStart < magicWord.Length Then suffix = magicWord.Substring(suffixStart, Math.Min(5, magicWord.Length - suffixStart)) & If(suffixStart + 5 < magicWord.Length, "...", "") End If resultBuilder.AppendLine($"第{matchCount}处匹配:{prefix}[{searchStr}]{suffix}") startPos = matchPos + 1 End While If matchCount = 0 Then lblSearchResult.Text = "String not found." Else lblSearchResult.Text = $"共找到{matchCount}处匹配:{vbCrLf}{resultBuilder.ToString()}" End If End Sub
现有代码bug修正
你原来的复选框逻辑写的是判断Enabled属性,实际应该判断Checked属性,修改后代码如下:
Private Sub CheckBox2_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox2.CheckedChanged If CheckBox2.Checked Then Label4.Visible = False Label5.Visible = False End If End Sub Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged If CheckBox1.Checked Then Label4.Visible = True Label5.Visible = True End If End Sub
内容的提问来源于stack exchange,提问作者luke lopez
相关产品推荐
相关产品推荐

