【发布时间】:2017-11-21 11:10:36
【问题描述】:
我有一个简单的 VB 网络表单,在组框中有两个单选按钮,组框外的按钮调用另一个设置其他参数的表单。单选按钮都通过串行端口发送数据。
Form1_load 事件有一个布尔值form_loading = True。这在 rbtn 处理程序中进行检查,如果为 true,则应退出子例程。在调试时,检查更改甚至会触发一个在设计时检查的按钮事件,此时form_loading 值设置为 false,我不知道为什么。没有form_loading = false 声明。如果我删除 rbtn 处理程序,form_loading = True 在调用并返回另一个表单时仍然存在。带有按钮的组框被激活,因为它在表单加载时看到 rbtn1-CheckChanged 并且form_loading 值设置为 false。我怀疑 rbtn 事件在表单开始加载时触发,在到达 form_loading = True 语句之前,但我如何阻止它触发按钮事件?
就目前而言,当调试开始时,有一个IO异常错误:
串口已关闭,与按钮相关的代码在 发送到(关闭的)com 端口的缓冲区
Private Sub rbtnDon_CheckedChanged(sender As Object, e As EventArgs) Handles rbtnDon.CheckedChanged
If form_loading Then
Exit Sub
ElseIf rbtnDoff.Checked = True Then 'event fires when other button checkchanged = true, this stops it
Exit Sub
Else
data_out = (SOT + "N" + EOT)
SendtoBoard(data_out)
End If
End Sub`enter code here`
【问题讨论】:
-
“Form1_load 事件有一个布尔值” 我不明白这一点。也许你应该包括
Form1_load。因为如果那是该事件处理程序中的局部变量,您应该无法在此处访问它。它的初始值为true,并且没有代码将其设置为false?那么rbtnDon_CheckedChanged中的false是不可能的。 -
在表单的
New()方法中设置form_loading变量或使用反向逻辑 - 声明form_loaded并在表单加载/激活后设置它true。 -
VB.NET IDE 隐藏了窗体的构造函数,这对您没有帮助。键入“Sub New”,然后按 Enter。并且确实考虑更改您的 UI,通常明智的做法是仅在选中单选按钮时才做一些重要的事情。因此,您会倾向于另一个按钮的 CheckedChanged 事件处理程序来执行此操作。
-
ElseIf rbtnDoff.Checked = True Then>> 也许应该是 == 因为你在这里检查 rbtnDoff...
标签: vb.net