繁体   English   中英

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

还有另一个标记为“加载”的按钮,其代码如下:

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
....

除此之外,您确实应该将诸如阅读器和写入之类的可抛弃对象的创建放在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")

除了没有命名控件,没有正确处理StreamReaderStreamWriter实例之外,这种方法无法正常工作的原因还在于,当您编写文件时,您会调用WriteLine将回车符和换行符附加到您的文件末尾我写了。

然后,您读取文件,并将内容放入标签中,标签本身将使CR / LF可见,尽管您看不到。 然后,将您与该标签的Text进行比较,但不带CR / LF-比较结果为false。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM