不确定我的标题是否有意义,所以我会在这里解释我的问题。所以基本上我通过允许在其中定制事物来扩展我的程序。
比如说我这样做:我点击文件 - >使用选项卡打开选项和新表单。我有不同的设置,您可以通过下拉框和复选框切换。现在,一旦用户设置了他们想要或不想要的设置,他们就会点击一个按钮,上面写着" OK"或"取消"。
保存这些设置或恢复原始设置的方法是什么?你是通过txt文件保存的,还是某个代码行中的默认函数?
更新:
所以我修复了上一期。现在我有另一个与保存。保存工作正常,但是我想在选择我的CheckListBox Collection范围时使用它们,并且还在启动时加载该范围。所以这些是我一直用来做的两件事,这会导致添加到之前的set集合中。
为RNG工作:
Dim rand As New Random()
Dim winners = Enumerable.Range(1, My.Settings.numberSetting).OrderBy(Function(r) rand.Next()).Take(5).ToArray()
不适用于Onload CheckListBox:
Me.LotteryNumbers.Items.Add(1, My.Settings.numberSetting)
答案 0 :(得分:1)
这不应该编译:
LotteryNumbers.Items.Add(1, My.Settings.numberSetting)
带有第二个参数的重载期望Boolean
设置添加到Checked的项目。一种方法是在循环中添加项目:
Dim maxNums = My.Settings.numberSetting
' make sure it is empty
clb.Items.Clear()
For n As Int32 = 1 To maxNums
clb.Items.Add(n.ToString)
Next
我不想将Settings
中的项目用作变量,因此它会抓取当前使用的值。另一种方法是使用AddRange
:
clb.Items.AddRange(Enumerable.Range(1, maxNums).Select(Function(s) s.ToString()).ToArray())
Items
是Object的集合,因此Select
转换为字符串以添加它们。
答案 1 :(得分:1)
大多数情况下,幸运,,但不能保证。在运行时代码爆炸只是时间问题。要排序的序列越长,获得异常的可能性就越大。
你应该做的是实施Fisher-Yates排序方法:
Private rand As New Random()
Public Function Shuffle(Of T)(ByVal items As IList(Of T)) As IList(Of T)
For i As Integer = items.Count - 1 To 1 Step -1
Dim j As Integer = rand.Next(i + 1)
Dim temp As T= items(i)
items(i) = items(j)
items(j) = temp
Next
Return items
End Function
答案 2 :(得分:0)
解决工作代码以更新和保存checklistbox框计数。
Private Sub OptionOkButton_Click(sender As Object, e As EventArgs) Handles OptionOkButton.Click
Main.LotteryNumbers.Items.Clear()
My.Settings.numberSetting = CInt(NumberCombo.Text)
Dim maxNum = My.Settings.numberSetting
Main.LotteryNumbers.Items.AddRange(Enumerable.Range(1, maxNum).Select(Function(s) s.ToString()).ToArray())
My.Settings.Save()
Me.Close()
End Sub