VB.NET从文件

时间:2018-05-24 09:18:48

标签: vb.net checkbox

我正在尝试恢复2个复选框的状态。 这两个复选框我让它们作为radiobuttun工作:当一个被选中时,另一个被取消选中。

我有一个用于配置程序的外部文件,我希望退出程序的evrytime,所有内容都保存在此文件中。

为此,我使用此代码:

   Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing

    Dim thefile As String = Application.StartupPath & "\SafetyBox.cfg"
    Dim lines() As String = System.IO.File.ReadAllLines(thefile)

    lines(1) = "Language_file=" & ComboBox1.Text
    If CheckBox1.Checked = True Then
        lines(2) = "Status1=" & "1"
    Else
        lines(2) = "Status1=" & "0"
    End If
    If CheckBox2.Checked = True Then
        lines(3) = "Status2=" & "1"
    Else
        lines(3) = "Status2=" & "0"
    End If
    System.IO.File.WriteAllLines(thefile, lines)

End Sub`

这部分工作得很好。 Status1应为checkbox1的状态,而status2为checkbox2的状态。

无效的代码是:

 Dim path As String = Application.StartupPath & "\SafetyBox.cfg"
    If File.Exists(path) Then

        Using sr As StreamReader = New StreamReader(path)

            Dim linenew As String = sr.ReadLine()
            If linenew.Contains("\") Then
                TextBox1.Text = linenew



            Else
                MsgBox("Configura il programma da usare")
            End If

            Dim lineN As String = sr.ReadLine()
            If lineN.Contains("Language_file=") Then
                ComboBox1.Text = lineN.Split("=").Last()
            End If
            If lineN.Contains("Status1=1") Then
                CheckBox1.Checked = True
                CheckBox2.Checked = False

            ElseIf lineN.contains("Status1=0") Then
                CheckBox1.Checked = False
                CheckBox2.Checked = True

            End If



            If lineN.Contains("Status2=1") Then
                CheckBox1.Checked = False
                CheckBox2.Checked = True

            ElseIf lineN.Contains("Status2=0") Then
                CheckBox1.Checked = True
                CheckBox2.Checked = False
            End If
                sr.ReadToEnd()
            sr.Close()
        End Using

你能不能让我知道我的错误在哪里?为什么在.cfg文件中正确写入时Status1 = 0且Status2 = 1,加载程序时我总是看到checkbox1 checkd而不是checkbox2?

谢谢

1 个答案:

答案 0 :(得分:0)

您写道,您CheckBoxes的工作时间为RadionButtons。我怀疑为了做到这一点,你处理了CheckedChangedCheckStateChanged中的一个或两个事件。

因此,当更改CheckState时,会相应地设置或取消设置其他复选框。

从文件加载表单的配置/状态时,您将在CheckBoxes上设置值,然后导致触发事件。要防止事件被触发,您应该暂时从复选框控件中删除事件处理程序。

在方法开头添加行以加载配置:

RemoveHandler Checkbox1.CheckStateChanged, AddressOf Checkbox1_CheckStateChanged
RemoveHandler Checkbox2.CheckStateChanged, AddressOf Checkbox2_CheckStateChanged

并且,在方法结束时,您需要使用以下命令重新建立事件处理程序:

AddHandler Checkbox1.CheckStateChanged, AddressOf Checkbox1_CheckStateChanged
AddHandler Checkbox2.CheckStateChanged, AddressOf Checkbox2_CheckStateChanged

如果这是问题所在,当表单有多个响应xxxChanged事件的事件处理程序时,遇到的问题是一个常见的问题。