我正在嘗試創建一個顯示當前狀態的組合框,并讓其選項更改程式的狀態。
雖然它有效,但我無法讓它顯示當前狀態。
每當引發 ComboBox 事件之一時,當我將 ComboBox.Text 屬性設定為任何內容時,它都會被忽略,并且我選擇的任何內容都會被設定。我可以將 SelectedIndex 更改為 -1 并清空編輯控制元件,但即使之后,我也無法更改組合框文本,就好像該事件在其他任何事情之前被觸發一樣。
添加一個命令按鈕確實允許我更改 ComboBox 的文本就好了。
這是我的測驗應用程式:
創建一個按鈕、bComboAdd一個標簽lTest和一個組合框:cbSelect。
添加兩個專案cbSelect并將文本設定為不同的內容。
在我的測驗中,我將專案設定為"Set to ,"和"Set to ;"。
使用以下代碼:
Private Sub bComboAdd_Click(sender As Object, e As EventArgs) Handles bComboAdd.Click
me.cbSelect.Text = "Testing"
me.lTest.Text = "Testing"
End Sub
Private Sub cbSelect_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbSelect.SelectedIndexChanged
Select Case Me.cbSelect.SelectedIndex
Case 0
Me.cbSelect.Text = "Mode: ,"
me.lTest.Text = "Mode: ,"
Case 1
Me.cbSelect.Text = "Mode: ;"
me.lTest.Text = "Mode: ;"
End Select
End Sub

cbSelect.Text = [...]被忽略,而lTest.Text作品就好了。
我單擊組合框,將其設定為"Set to ;",文本更改為,"Set to ;"而標簽更改為"mode: ;"
我也試過這個,同樣的結果:
Private Sub cbSelect_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbSelect.SelectedIndexChanged
Select Case Me.cbSelect.SelectedItem
Case "Set to ,"
Me.cbSelect.Text = "Mode: ,"
Me.lTest.Text = "Mode: ,"
Case "Set to ;"
Me.cbSelect.Text = "Mode: ;"
Me.lTest.Text = "Mode: ;"
End Select
End Sub
現在,如果我將狀態文本添加為??串列中的可選文本,即使在運行時,它也可以作業。但是如果我在運行時再次洗掉它們,它就不起作用了。所以似乎正在進行某種驗證,但只有當我從控制元件本身設定文本時。
如何讓 ComboBox 的文本按預期更改?
uj5u.com熱心網友回復:
當引發 ComboBox 的 SelectedIndexChanged 事件時,底層代碼還會向 ComboBox 發送一條訊息以更新其文本(這里是關于它的注釋)。
這意味著當您設定組合框的文本時,它會在事件處理程式退出后立即更新為 SelectedItem ( [ComboBox].GetItemText(Items(SelectedIndex))) 的文本。
通過延遲執行設定 Text 屬性的代碼,使用BeginInvoke(),您可以在 ComboBox 的文本更新后執行操作,因此您可以覆寫前面提到的程序:
Private Sub cbSelect_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbSelect.SelectedIndexChanged
If cbSelect.SelectedIndex < 0 Then Return
Dim cboText = string.Empty
Select Case cbSelect.GetItemText(cbSelect.SelectedItem)
Case "Something"
cboText = "Other"
' [...]
End Select
BeginInvoke(new Action(Sub() cbSelect.Text = cboText))
End Sub
不請自來的建議:
您可以使用 aDictionary(Of String String)來存盤要設定的值,并使用 SelectedItems 文本值作為字典的鍵來檢索相應的文本,因此您只需要使用[Dictionary].ContainsKey()來驗證所選內容text,然后獲取用于更改 ComboBox 的 Text 的匹配值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/525265.html
標籤:VB.net表格组合框
