Vb.net 缩短/优化某些代码

Vb.net 缩短/优化某些代码,vb.net,optimization,Vb.net,Optimization,我有下面的代码部分,它可以工作,但我只是想知道是否有一种更简单的方法来编写它,也许用更少的代码行。我的项目由4个单选按钮组成,我试图保存选择4个单选按钮的值 我问,因为我有多套4-10个单选按钮需要保存设置 代码: 可以使用如下函数搜索控件: My.Settings.SearchTime5 = GetCheck(5) My.Settings.SearchTime10 = GetCheck(10) My.Settings.SearchTime30 = GetCheck(30

我有下面的代码部分,它可以工作,但我只是想知道是否有一种更简单的方法来编写它,也许用更少的代码行。我的项目由4个单选按钮组成,我试图保存选择4个单选按钮的值

我问,因为我有多套4-10个单选按钮需要保存设置

代码:


可以使用如下函数搜索控件:

    My.Settings.SearchTime5 = GetCheck(5)
    My.Settings.SearchTime10 = GetCheck(10)
    My.Settings.SearchTime30 = GetCheck(30)
    My.Settings.SearchTime60 = GetCheck(60)

Private Function LabelControl(ByVal index As Integer) As Integer
    Dim rad As RadioButton = CType(Me.Controls.Find("RADtime" + index.ToString, True).First, RadioButton)
    Return If(rad.Checked, 1, 0)
End Function
但是,如果经常引用控件,则可以更容易地将控件的引用添加到列表中。当Visual Basic将布尔值转换为数字类型时,False变为0,True变为-1。因此,您可以尝试以下方法

    My.Settings.SearchTime5 = -CInt(RADtime5.Checked)
    My.Settings.SearchTime10 = -CInt(RADtime10.Checked)
    My.Settings.SearchTime30 = -CInt(RADtime30.Checked)
    My.Settings.SearchTime60 = -CInt(RADtime60.Checked)
    RADtime5.Checked = CInt(My.Settings.SearchTime5)
    RADtime10.Checked = CInt(My.Settings.SearchTime10)
    RADtime30.Checked = CInt(My.Settings.SearchTime30)
    RADtime60.Checked = CInt(My.Settings.SearchTime60)
或者您可以使用来获取它们的绝对值

编辑

当Visual Basic将数字数据类型值转换为布尔值时,0变为False,所有其他值变为True。要读取这些值,可以执行以下操作

    My.Settings.SearchTime5 = -CInt(RADtime5.Checked)
    My.Settings.SearchTime10 = -CInt(RADtime10.Checked)
    My.Settings.SearchTime30 = -CInt(RADtime30.Checked)
    My.Settings.SearchTime60 = -CInt(RADtime60.Checked)
    RADtime5.Checked = CInt(My.Settings.SearchTime5)
    RADtime10.Checked = CInt(My.Settings.SearchTime10)
    RADtime30.Checked = CInt(My.Settings.SearchTime30)
    RADtime60.Checked = CInt(My.Settings.SearchTime60)

声明一个名为SettingsFormatter的共享类,使用名为
BooleanToInteger
的共享方法(接受布尔值,返回整数)。然后打电话:

My.Settings.SearchTime5 = SettingsFormatter.BooleanToInteger(RADtime5.Checked)
My.Settings.SearchTime10 = SettingsFormatter.BooleanToInteger(RADtime10.Checked)
My.Settings.SearchTime30 = SettingsFormatter.BooleanToInteger(RADtime30.Checked)
My.Settings.SearchTime60 = SettingsFormatter.BooleanToInteger(RADtime60.Checked)
以下是
BooleanToInteger
的代码:

Public Shared Function BooleanToInteger(value As Boolean) As Integer
  Return If(value, 1, 0)
End Function

以后,您可以声明需要在整个项目中重用的任何其他自定义转换。

我在加载时引用它们一次,在应用设置时引用它们一次。这可能真的有效,我将不得不做一些实验。谢谢您知道My.Settings值可以是布尔类型吗?因此,您可以选中
My.Settings.SearchTime5=RADtime5.等。因此,这应该直接将每个单选按钮的值(0或1)存储到My.Settings中?我可以用它来读取设置吗-CInt(RADtime60.Checked)=My.Settings.SearchTime60是的,代码将允许您直接存储值。要阅读它们,请查看编辑。太棒了,谢谢!我想这同样适用于复选框。其中1被选中,0被取消选中。不客气,您可以对任何具有布尔数据类型的组件使用相同的逻辑。它工作得非常好。谢谢!我想知道现在是否有一种方法可以进一步减少搜索间隔,并且只有1.设置来存储搜索间隔,而不是4个不同的.设置,每个时间段一个。