视觉基础如果,否则不工作2015年

时间:2015-02-12 17:13:41

标签: vb.net visual-studio-2010 if-statement

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

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

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

2 个答案:

答案 0 :(得分:1)

这是因为在阅读代码中您使用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
....

你应该把这个一次性对象的创建放在一个using语句中,以确保这些对象在异常的情况下被正确关闭和处理。

如果您使用File类的静态方法

,那么您的代码可以简化很多

书写

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")

答案 1 :(得分:1)

请注意,不要命名您的控件,也不要正确处理StreamReaderStreamWriter个实例,因为这样做不正确是因为当您编写文件时,请拨打WriteLine - 它会在您所写的内容的末尾添加回车符和换行符。

然后您阅读该文件,并将内容放入标签中,该标签本身将呈现CR / LF,尽管您不可见。然后,您将与此标签的Text进行比较,但不使用CR / LF,以便比较评估为false。