【问题标题】:delete selected entry in CheckedListBox删除 CheckedListBox 中的选定条目
【发布时间】:2021-08-23 11:04:39
【问题描述】:

美好的一天! 所以从 CheckedListBox 中删除所有勾选的条目

  For Each item In CheckedListBox1.CheckedItems.OfType(Of String)().ToList()
            CheckedListBox1.Items.Remove(item)
        Next item

告诉我如何删除 CheckedListBox 中选中的条目?

在图片中,名称为 3 的记录被突出显示。是否有可能以及如何在不检查的情况下将其删除?

【问题讨论】:

  • 真的吗?您知道您必须使用CheckedItems 集合来删除选中的项目,但您一生都无法弄清楚如何删除选中的项目?您还没有真正考虑到这一点,而且您几乎可以肯定还没有阅读该课程的文档。如果您还没有阅读相关文档,那么您还没有真正尝试过自己解决问题,所以现在提出问题还为时过早。
  • 顺便说一句,虽然它会起作用,但你真的不应该在那里打电话给OfType(Of String)。除非您按类型过滤,否则OfType 会做不必要的工作。此外,您只需要 Object 引用,因此 String 是不必要的特定,如果您没有首先添加 Strings 将无法工作。请改用Cast(Of Object)
  • @Jimi,我不确定你到底想告诉我什么。也许只是说你认为我的评论有问题。 OfType 用于按类型过滤,但这里没有进行过滤。 Cast 用于将IEnumerable 转换为IEnumerable(Of T),这正是这里正在做的,所以也正是这里应该使用的。如果项目为Strings,则转换为String 类型将起作用,但它们被用作Objects,所以这就是所需的全部。实际上,如果项目不是Strings,那么OfType 实际上会过滤掉所有CheckedItems。有什么不对?
  • @jmcilhinney 没有正确错误,只是信息。与 OfType 相关的工作在这里做了不必要的工作。 -- Cast 可以抛出,OfType 会跳过(被认为是更安全,但你可能想要抛出,所以,这取决于)。

标签: vb.net checkedlistbox


【解决方案1】:

这是一个简单的例子

  • 删除所有选中的项目
  • 不考虑选中状态删除当前项目。

表格代码

Imports System.Globalization

Public Class Form1
    Private Sub RemoveCheckedButton_Click(sender As Object, e As EventArgs) Handles RemoveCheckedButton.Click

        If MonthCheckedListBox.CheckedItems.Count > 0 Then

            MonthCheckedListBox.CheckedItems.Cast(Of String)().ToList().
                ForEach(Sub(item) MonthCheckedListBox.Items.Remove(item))

            SetActive()

        End If

    End Sub
    Private Sub RemoveCurrentButton_Click(sender As Object, e As EventArgs) Handles RemoveCurrentButton.Click

        If MonthCheckedListBox.Items.Count > 0 Then
            MonthCheckedListBox.Items.RemoveAt(MonthCheckedListBox.SelectedIndex)
            SetActive()
        End If

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        MonthCheckedListBox.Items.AddRange(
            Enumerable.Range(1, 12).
                    Select(Function(index)
                               Return DateTimeFormatInfo.CurrentInfo.GetMonthName(index)
                           End Function).ToArray())

        SetActive()

    End Sub
    Private Sub SetActive()

        ActiveControl = MonthCheckedListBox

        If MonthCheckedListBox.Items.Count > 0 Then
            MonthCheckedListBox.SelectedIndex = 0
        End If

    End Sub
End Class

【讨论】:

    【解决方案2】:
    Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckedListBox1.SelectedIndexChanged
        If isDeleted = False Then
            isDeleted = True
            CheckedListBox1.Items.RemoveAt(CheckedListBox1.SelectedIndex)
        Else
            isDeleted = False
        End If
    
    End Sub
    

    【讨论】:

      【解决方案3】:

      Dim isDeleted As Boolean = False

      Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckedListBox1.SelectedIndexChanged
          If isDeleted = False Then
              isDeleted = True
              CheckedListBox1.Items.RemoveAt(CheckedListBox1.SelectedIndex)
          Else
              isDeleted = False
          End If
      
      End Sub
      

      【讨论】:

        【解决方案4】:

        Private Sub CheckedListBox1_Click(sender As Object, e As EventArgs) 处理 CheckedListBox1.Click

        Dim i As String = ""

        i = CheckedListBox1.SelectedItem
        
            If i = Nothing Then
                Exit Sub
            Else
                CheckedListBox1.Items.Remove(i)
            End If
        End Sub
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多