Visual basic If and else 不工作 2015

Visual basic If and else not working 2015

我是新手,我在使用 visual basic 的 'if' 和 'else' 函数时遇到了一些问题。 我添加了一个标记为保存的按钮,其代码如下:

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click

If CheckBox1.Checked = True Then
        Dim savedata7 As New System.IO.StreamWriter("dat0C.bin")
        savedata7.WriteLine("checked")
        savedata7.Close()
    End If
    If CheckBox1.Checked = False Then
        Dim savedata7 As New System.IO.StreamWriter("dat0C.bin")
        savedata7.WriteLine("unchecked")
        savedata7.Close()
    End If
    If CheckBox2.Checked = True Then
        Dim savedata8 As New System.IO.StreamWriter("dat1C.bin")
        savedata8.WriteLine("checked")
        savedata8.Close()
    End If
    If CheckBox2.Checked = False Then
        Dim savedata8 As New System.IO.StreamWriter("dat1C.bin")
        savedata8.WriteLine("unchecked")
        savedata8.Close()
    End If
End Sub

还有一个标签为Load的按钮,其代码如下:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
        Dim dataloader As New System.IO.StreamReader("dat0C.bin")
        Label17.Text = dataloader.ReadToEnd
        dataloader.Close()
    Catch ex As Exception

    End Try
    Try
        Dim dataloader As New System.IO.StreamReader("dat1C.bin")
        label10.Text = dataloader.ReadToEnd
        dataloader.Close()

    Catch ex As Exception

    End Try 
If Label17.Text = "checked" Then
        CheckBox1.Checked = True
    Else
        CheckBox1.Checked = False
    End If

    If Label10.Text = "checked" Then
        CheckBox2.Checked = True
    Else
        CheckBox1.Checked = False
    End If
End Sub

“保存”按钮 (Button5) 工作正常,但“加载”按钮 (Button1) 无法正常工作,单击 Button1 后,文件 'dat0C.bin' 和 'dat1c.bin' 加载到 'Label17' 和 'Label10' 但它不起作用(即它不检查 CheckBoxes1 或 2)来自

If Label17.Text = "checked" Then
    CheckBox1.Checked = True
Else
    CheckBox1.Checked = False
End If

If Label10.Text = "checked" Then
    CheckBox2.Checked = True
Else
    CheckBox1.Checked = False
End If

如果我做错了什么,请指正。

发生这种情况是因为在阅读代码中您使用 ReadToEnd 而不是 ReadLine。
此方法读回由 WriteLine 添加的换行符,并且不会像 ReadLine

那样将其删除
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
     Using dataloader = New System.IO.StreamReader("dat0C.bin")
         Label17.Text = dataloader.ReadLine()
     End Using
Catch ex As Exception
     MessageBox.Show("Exception=" & ex.Message)    
End Try
....

其中一部分你真的应该把像 reader 这样的一次性对象的创建和写入放在 using 语句中,以确保这些对象被正确关闭并在出现异常时也被处置。

也就是说,如果你使用 File 的静态方法,你的代码可以简化很多 class

写作

File.WriteAllText("dat0C.bin", If(CheckBox1.Checked, "checked", "unchecked"))
File.WriteAllText("dat1C.bin", If(CheckBox2.Checked, "checked", "unchecked"))

正在阅读

Label17.Text = File.ReadAllText("dat0C.bin")
Label10.Text = File.ReadAllText("dat1C.bin")
CheckBox1.Checked = (Label17.Text = "checked")
CheckBox2.Checked = (Label10.Text = "checked")

除了没有命名你的控件,没有正确处理你的 StreamReaderStreamWriter 实例之外,这不能正常工作的原因是因为当你写你的文件时你调用 WriteLine - 在您所写内容的末尾附加回车符 return 和换行符。

然后您读取文件,并将内容放在标签中,标签本身将呈现 CR/LF,尽管您不可见。然后,您与此标签的 Text 进行比较,但没有 CR/LF - 因此比较结果为 false。