2016-07-07 200 views
-1

我有两种形式的组合框。组合框值存储在My.Settings.testDevices中。 (System.Collections.Specialized.String.Collection),范围为User。My.Settings“目标数组不够长,请检查destIndex和长度以及数组的下限。”

第二种形式添加到项目添加到的testDevices的能力,然后在退出时它更新My.Settings.testDevices。

现在,只有当我做出改变的设置(只添加项目),当我退出返回到主窗体(这仍然加载整个过程),我的应用程序崩溃,并显示以下信息:

”附加信息:目标数组不够长,请检查destIndex和长度以及数组的下限。“

据我了解,这可能是一个的并发性问题,但我不知道。

我的代码:

在我的主要形式Load事件:(从My.Settings加载)

testDevicesComboBoxMain.Items.Clear() 
    My.Settings.testDevices.CopyTo(mainFormTestDevices, 0) 
    testDevicesComboBoxMain.Items.AddRange(mainFormTestDevices) 

其中 “testDevicesComboBoxMain” 为主要形式的组合框。

在辅助形式关闭事件:(保存到My.Settings)

Dim items(testDevicesComboBox.Items.Count - 1) As String 
    testDevicesComboBox.Items.CopyTo(items, 0) 
    My.Settings.testDevices.Clear() 
    My.Settings.testDevices.AddRange(items) 

    My.Settings.Save() 

我发现放在这里类似的问题,但没有用,我理解的答案:P

正如我一个初学者与vb.net,可以任何答案提供一个易于理解的形式请!

感谢。

我忘了补充:

Public items(My.Settings.testDevices.Count - 1) As String 
Public mainFormTestDevices(My.Settings.testDevices.Count - 1) As String 

我试着设置单独的声明,以防万一有某种冲突。这些显然是做同样的事情,只是名称不同而已。

+0

什么是'mainFormTestDevices'?而不是跳转到临时的东西,保存更改设置,然后在“主”形式创建一个方法,告诉它从设置重新加载cbo。 – Plutonix

+0

我刚刚意识到我忘了添加我的公共变量 - 我修改了我的问题。 – Tony

+0

'公共项目(My.Settings.testDevices.Count - 1)作为字符串'的大小只设置一次 - 变量不会监视设置和添加项目时使自己更大。因此,当您尝试将更多设置值复制到它时,您会看到该错误 - 目标*太小 – Plutonix

回答

0

我通过添加For循环来从My.Settings中读取它来修复它。

For Each i As String In My.Settings.testDevices 
     testDevicesComboBoxMain.Items.Add(i) 
    Next 

这似乎已经解决了问题,也许可能是一个更“现代”的方式呢?