在VB.Net中分配Checkbox.checked值调用checked事件

时间:2016-08-10 11:45:06

标签: vb.net checkbox

我有一个带有一些文本框和复选框的表单。我根据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'属性有什么区别?

2 个答案:

答案 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

应该删除事件处理程序,这样您就可以更新复选框而不必处理导致错误的事件。