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")
除了没有命名你的控件,没有正确处理你的 StreamReader
或 StreamWriter
实例之外,这不能正常工作的原因是因为当你写你的文件时你调用 WriteLine
- 在您所写内容的末尾附加回车符 return 和换行符。
然后您读取文件,并将内容放在标签中,标签本身将呈现 CR/LF,尽管您不可见。然后,您与此标签的 Text
进行比较,但没有 CR/LF - 因此比较结果为 false。
我是新手,我在使用 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")
除了没有命名你的控件,没有正确处理你的 StreamReader
或 StreamWriter
实例之外,这不能正常工作的原因是因为当你写你的文件时你调用 WriteLine
- 在您所写内容的末尾附加回车符 return 和换行符。
然后您读取文件,并将内容放在标签中,标签本身将呈现 CR/LF,尽管您不可见。然后,您与此标签的 Text
进行比较,但没有 CR/LF - 因此比较结果为 false。