我正在將一些遺留代碼從VB6遷移到VB.NET,並且我遇到了一個煩人的問題。目前正在發生的是用戶提供了RadionButton
控件來表示層次結構。當他們選擇一個值時,代碼會驗證它是否有效(不能讓C代表A的孩子,必須是B的孩子),如果不是,它會將RadioButton
返回到原始設置。更改事件中的RadioButton checkstate
問題是,當執行此操作的函數返回到事件處理函數時,它將返回RadioButton
狀態到單擊它時的狀態(用戶單擊C,代碼返回到B,函數退出時返回到C發射事件將再次變成B等,從而導致無限循環)。有沒有辦法改變哪個RadioButton is selected inside a function called by
CheckedChanged`事件並讓它堅持?
我知道更好的設計是提前禁用無效的RadioButton
控件,但這是它的設計方式,我的工作是讓它在有限的時間框架內工作,所以我現在被糟糕的設計困住了以後反對好設計。
代碼:
Private Sub optIndent_2_ClickEvent(sender As Object, e As EventArgs) Handles optIndent_2.CheckedChanged
optIndent_Click(2, sender.Checked)
End Sub
Private Sub optIndent_3_ClickEvent(sender As Object, e As EventArgs) Handles optIndent_3.CheckedChanged
optIndent_Click(3, sender.Checked)
Dim i As Integer = 1
End Sub
Private Sub optIndent_Click(ByRef Index As Short, ByRef value As Short)
If value = False Then
Exit Sub
End If
If Index = 2 Then
Exit Sub
End If
If Index = 3 Then
optIndent_2.Checked = True
Exit Sub
End If
End Sub
你會看到,當代碼退出optIndent_Click (3, sender.checked)
值將會從虛假到真實的轉變,該進程將永遠重複。