我有一個帶有專案串列的 listbox1。如果用戶必須通過單擊滑鼠選擇一個專案,并且如果該選定的串列專案中有一個等號,它必須立即顯示一條訊息說明這一點并取消選擇該專案。
我查看了各種解決方案,所有這些解決方案都無法按我的意愿作業:-
下面是我的代碼,大部分時間都可以正常作業,但在之前已經選擇了兩個或多個專案時不起作用。我需要一個永遠有效的解決方案。
Private Sub ListBox1_MouseClick(sender As Object, e As MouseEventArgs) Handles ListBox1.MouseClick
For I = 0 To ListBox1.SelectedItems.Count - 1
If Not ListBox1.Items(I).ToString.Contains("=") Then
ListBox1.SetSelected(I, False)
' MsgBox("Please only select items that have = in description ! ! ! Edit item if you want to include . . .", MsgBoxStyle.Critical)
End If
Next
ListBox1.Refresh()
End Sub
uj5u.com熱心網友回復:
我認為最好使用SelectedIndexChangedEvent:
Private Sub ListBox1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
With CType(sender, ListBox)
For i As Integer = .SelectedItems.Count - 1 To 0 Step -1
If Not IsNothing(.SelectedItems(i)) AndAlso Not .SelectedItems(i).ToString.Contains("=") Then
MsgBox("Invalid selection.")
.SelectedItems.Remove(.SelectedItems(i))
End If
Next i
End With
End Sub
uj5u.com熱心網友回復:
此問題的一種解決方案是獲取 - 在SelectedIndexChanged事件中 - 無效選擇的索引(如果有)以取消選擇它們并顯示訊息。特別是處理SelectedIndexChanged事件是使其與滑鼠和鍵盤輸入一起作業。
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) _
Handles ListBox1.SelectedIndexChanged
With ListBox1
Dim invalidSel = .SelectedIndices.Cast(Of Integer).
Where(Function(i) Not .GetItemText(.Items(i)).Contains("="))
If invalidSel.Any() Then
RemoveHandler ListBox1.SelectedIndexChanged,
AddressOf ListBox1_SelectedIndexChanged
For Each i In invalidSel
.SetSelected(i, False)
Next
MessageBox.Show("Please....")
AddHandler ListBox1.SelectedIndexChanged,
AddressOf ListBox1_SelectedIndexChanged
End If
End With
End Sub
注意,洗掉然后重新添加處理程式是為了避免在多選模式下重復顯示訊息框。沒有它,每次.SetSelected(i, False)呼叫都會觸發該事件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/493974.html
標籤:VB.net
