【问题标题】:Assign Checkbox.checked value invoke checked event in VB.Net在 VB.Net 中分配 Checkbox.checked 值调用选中的事件
【发布时间】:2016-12-16 18:53:23
【问题描述】:

我有一个带有一些文本框和复选框的表单。我正在根据文本框上的值进行计算。取决于复选框状态,输出值会发生变化。 同时,我将所有这些数据保存到 excel 表中,包括复选框状态到 excel 表中。稍后我会将这些数据导入表单以进行进一步计算。因此,当我将值从 excel 导入表单时,当我将复选框的状态更改为选中时。然后调用 Tempmetric_CheckedChanged() 函数并创建一些错误,因为此时我没有所有输入值进行计算。 我怎样才能避免这种情况?只是我有一个想法在 Import 函数中设置标志,我将在 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' 属性有什么区别?

【问题讨论】:

  • 使用标志以您描述的方式启用/禁用事件是一种标准技术。
  • “Checked”只能假设两个值,布尔值(true/false),“CheckState”可以有三个值,checked/unchecked/indeterminate。两个属性同时变化,checked=true / unchecked=false / indeterminate=true。

标签: vb.net checkbox


【解决方案1】:

两种可能的解决方案:

1) 将“Tempmetric”的事件从CheckedChanged改为Click。

2) 添加一个全局布尔变量“Importing”,并在从 Excel 导入的函数中将其设置为“true”,并在 CheckedChanged 事件中检查此变量。

【讨论】:

  • 我尝试了第一个解决方案,效果很好。谢谢。
【解决方案2】:

您可以尝试从复选框中删除 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

删除事件处理程序应该可以使您可以更新复选框,而无需处理导致错误的事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-11
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2015-06-14
    • 2013-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多