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

求助:将TextBox输入保存至Settings的StringCollection代码故障排查

修复TextBox数据保存/加载到Settings StringCollection的问题

我来帮你梳理下代码里的问题,主要是控件遍历逻辑和集合初始化的位置不对,导致数据没法正常存到My.Settings.savetxt里。咱们一步步来修正:

原代码的核心问题

  • 错误的控件遍历语法:For Each TBox() As TextBox In Me.Panel1.Controls 这种写法是错的,而且Panel里的控件不都是TextBox,直接强制转换会触发类型错误。
  • 集合初始化重复执行:你把savetxt的初始化放在了For Each循环内部,每次循环都会重新创建空集合,之前保存的数据直接就被覆盖了。
  • 索引越界风险:保存和加载时没有确保StringCollection的长度和TextBox数量匹配,直接按索引赋值/取值很容易触发异常。

修正后的完整代码

加载数据(LoadingData)

Sub LoadingData()
    ' 先初始化StringCollection(只在第一次为空的时候创建)
    If My.Settings.savetxt Is Nothing Then
        My.Settings.savetxt = New System.Collections.Specialized.StringCollection
    End If

    ' 遍历Panel里的所有控件,筛选出TextBox
    Dim textBoxIndex As Integer = 0
    For Each ctrl As Control In Me.Panel1.Controls
        If TypeOf ctrl Is TextBox Then
            Dim tBox As TextBox = DirectCast(ctrl, TextBox)
            ' 确保集合有足够的元素,没有的话补空字符串
            If textBoxIndex >= My.Settings.savetxt.Count Then
                My.Settings.savetxt.Add("")
            End If
            ' 给TextBox赋值
            tBox.Text = My.Settings.savetxt(textBoxIndex)
            textBoxIndex += 1
        End If
    Next
End Sub

保存数据(SavingData)

Sub SavingData()
    ' 先初始化StringCollection(防止为空)
    If My.Settings.savetxt Is Nothing Then
        My.Settings.savetxt = New System.Collections.Specialized.StringCollection
    Else
        ' 清空旧数据,避免和新数据长度不匹配
        My.Settings.savetxt.Clear()
    End If

    ' 遍历Panel里的TextBox,把文本添加到集合
    For Each ctrl As Control In Me.Panel1.Controls
        If TypeOf ctrl Is TextBox Then
            Dim tBox As TextBox = DirectCast(ctrl, TextBox)
            My.Settings.savetxt.Add(tBox.Text)
        End If
    Next

    ' 保存设置
    My.Settings.Save()
End Sub

关键修改点说明

  1. 正确筛选TextBox:用TypeOf ctrl Is TextBox判断控件类型,再用DirectCast转换,避免类型转换错误。
  2. 集合初始化移到循环外:只在My.Settings.savetxt为空的时候初始化一次,不会覆盖已有数据。
  3. 保存时清空旧数据:避免旧数据的长度和当前TextBox数量不一致导致的索引问题,直接清空后重新添加新数据更稳妥。
  4. 按顺序遍历赋值:用一个计数器textBoxIndex来对应集合的索引,确保每个TextBox的数据都能正确对应到集合的位置。

内容的提问来源于stack exchange,提问作者Raffa b

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:43:31