我有一个带有一些文本框和复选框的表单。我根据textbox上的值进行计算。取决于复选框状态,输出值会发生变化。 同时,我将所有这些数据保存到Excel工作表中,包括复选框状态到Excel工作表。稍后我会将这些数据导入表格进行进一步计算。因此,当我将值从excel导入到表单时,我将复选框的状态更改为已选中。然后调用Tempmetric_CheckedChanged()函数并创建一些错误,因为此时我没有计算所有输入值。 我怎么能避免这种情况?我有一个想法在导入功能中设置标志,我将在Tempmetric_CheckedChanged()中检查此标志,以避免进一步工作。
Private Sub Tempmetric_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Tempmetric.CheckedChanged
If Tempmetric.Checked Then
STempUnit.Text = "F"
FTempunit.Text = "F"
Else
STempUnit.Text = "C"
FTempunit.Text = "C"
End If
Button1_Click(sender, New System.EventArgs()) // i have to use flag before this function call
End Sub
Private Sub SaveBTn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveBTn.Click
Dim metric As Integer
If Tempmetric.Checked Then
metric = 1
Else
metric = 0
End If
xlWorkSheet.Cells(7, 1) = "Metric"
xlWorkSheet.Cells(7, 1).Font.Bold = True
xlWorkSheet.Cells(7, 2) = metric
End Sub
Private Sub ImpInputBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ImpInputBtn.Click
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet
For rCnt = 1 To range.Rows.Count
SamTemp.Text = xlWorkSheet.Cells(4, 2).Value.ToString
FormTemp.Text = xlWorkSheet.Cells(5, 2).Value.ToString
If xlWorkSheet.Cells(7, 2).Value = 1 Then
Tempmetric.Checked = True
End If
Next
End Sub
还有其他可能的方法吗? 'Checked'和'CheckState'属性有什么区别?
答案 0 :(得分:0)
两种可能的解决方案:
1)更改" Tempmetric"从CheckedChanged到Click。
2)添加一个全局布尔变量"导入"并且在您从Excel导入的功能中,您将其设置为" true"并在CheckedChanged事件中检查此变量。
答案 1 :(得分:0)
您可以尝试从复选框中删除 OnCheckedChanged 处理程序,从 Excel 工作表导入数据并在复选框上设置已选中的属性,最后重新分配 OnChecked 处理程序:
Public Class MyForm
Private Sub ImportButton_Click(...)
RemoveHandler MyCheckbox.CheckChanged, AddressOf Me.MyCheckbox_CheckedChanged
ImportDataAndSetCheckboxs()
AddHandler MyCheckbox.CheckChanged, AddressOf Me.MyCheckbox_CheckedChanged
End Sub
Private Sub ImportDataAndSetCheckboxs()
' ... Do work to import and update checkboxes
End Sub
Private Sub MyCheckbox_CheckedChanged(...) Handles MyCheckbox.CheckedChanged
' ... Whatever work needs to get done here
End Sub
End Class
应该删除事件处理程序,这样您就可以更新复选框而不必处理导致错误的事件。