我有一个简单的VB网络表单,组框中有两个单选按钮,组框外面有一个按钮,可以调用另一个设置其他参数的表单。单选按钮都通过串行端口发送数据。
Form1_load事件具有布尔值form_loading = True
。这在rbtn处理程序中检查,如果为true则应退出子例程。在调试时,检查更改甚至触发在设计时检查的一个按钮的事件,此时form_loading
值设置为false,我不知道为什么。没有form_loading = false
声明。如果我删除了rbtn处理程序,则在调用并返回另一个表单时,form_loading = True
会一直存在。当表单加载并且form_loading
值设置为false时,带有按钮的组框被激活,因为它看到rbtn1-CheckChanged。我怀疑rbtn事件在表单开始加载时触发,在达到form_loading = True
语句之前,但是如何阻止它触发按钮事件?
就其而言,当调试开始时,存在IO异常错误:
已关闭Serialport,并且与该按钮关联的代码位于 要发送到(关闭)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`
答案 0 :(得分:0)
感谢大家的帮助。在其他地方我发现了这个提示:删除"处理rbtnDon checkchanged"从子:
Private Sub rbtnDon_CheckedChanged(sender As Object,e As EventArgs)处理rbtnDon checkchanged
并将其添加到form1_load子目录:
AddHandler rbtnDon.CheckedChanged,New EventHandler(AddressOf rbtnDon_CheckedChanged)
这似乎完全解决了这个问题。
我无法在原始帖子中添加启动代码,因为某些原因该框不会接受两个单独的代码 - 或者我做得不对: 它在这里:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For i As Integer = 0 To My.Computer.Ports.SerialPortNames.Count - 1
ccbComPort.Items.Add(My.Computer.Ports.SerialPortNames(i))
Next
If ccbComPort.Items Is Nothing Then
lblMessage.ForeColor = Color.Red
lblMessage.Text = "No Serial Ports found"
Else
ccbComPort.Text = My.Settings.oldPort
End If
ccbBaudrate.Text = My.Settings.oldBaud
pnlComPorts.Visible = True
'form_loading = True
rbtnDon.Enabled = True
AddHandler rbtnDon.CheckedChanged, New EventHandler(AddressOf rbtnDon_CheckedChanged)
End Sub
最初我有一个带有Com端口设置面板的表单,一切都很好,只有当我将端口设置移动到form2时才开始出现问题,之后在form1启动之前触发了rbtnDon事件。 我确实尝试了Sub New()方法但是我只是在调试时得到一个小的空白表单。向其添加Form1_load会导致" NotImplemented Exception"。
上面介绍的方法似乎还可以,添加起来相当简单,但这可能不是一个好习惯吗?