簡體   English   中英

在 VB.Net 中分配 Checkbox.checked 值調用已檢查事件

[英]Assign Checkbox.checked value invoke checked event in VB.Net

我有一個帶有一些文本框和復選框的表單。我根據文本框上的值進行計算。取決於復選框狀態,輸出值會發生變化。 同時,我將所有這些數據保存到 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”屬性有什么區別?

兩種可能的解決方案:

1)將“Tempmetric”的事件從CheckedChanged改為Click。

2)添加一個全局布爾變量“Importing”,並在從Excel導入的功能中將其設置為“true”並在CheckedChanged事件上檢查此變量。

您可以嘗試從復選框中刪除 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

刪除事件處理程序應該使您可以更新復選框而不必處理導致錯誤的事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM