啥也不会的乘序猿 2024-04-26 16:33 采纳率: 20%
浏览 5

VB.net的CheckedListBox控件,点击控件的空白没有数据的地方,还是能触发相关事件,如何能做到点击空白没有数据的地方

VB.net的CheckedListBox控件,当选中一条数据后,点击控件的空白没有数据的地方,还是能触发相关事件,如何能做到点击空白没有数据的地方,不触发事件

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-26 16:33
    关注

    引自免费微信小程序:皆我百晓生

    在 VB.NET 中,为了防止用户点击 CheckedListBox 控件的空白区域触发事件,你需要在处理事件时检查鼠标点击的位置是否落在某个项目上。这可以通过比较鼠标的坐标与每个项目的矩形位置来实现。

    首先,在 Form 的 Load 事件中设置一个变量用于存储当前选中的项目索引,这样我们可以在 Click 事件中判断点击的是不是已经选择的项目。然后,在 Click 事件处理函数中进行相应的判断。

    以下是具体的步骤和代码示例:

    1. 在 Form 的 Load 事件中添加以下代码:
    Private selectedIndex As Integer = -1 ' 初始化为-1,表示未选择任何项目
    
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' 当然,这里假设你已经有了 CheckedListBox 的实例,比如名为 checkedListBox1
        If Not checkedListBox1.Items.Count = 0 Then ' 如果列表中有项目
            selectedIndex = 0 ' 将选定项设为第一个(默认情况下)
            checkedListBox1.SetItemChecked(selectedIndex, True) ' 勾选它
        End If
    End Sub
    
    1. 然后,为 CheckedListBox 添加 Click 事件处理程序,如下所示:
    Private Sub checkedListBox1_Click(sender As Object, e As EventArgs) Handles checkedListBox1.Click
        Dim mousePoint As Point = checkedListBox1.PointToClient(Control.MousePosition)
        Dim itemHit As Integer = checkedListBox1.IndexFromPoint(mousePoint)
    
        If itemHit >= 0 Then ' 如果点击了某个项目
            If itemHit <> selectedIndex Then ' 如果点击的不是之前选中的项目
                If selectedIndex >= 0 Then ' 如果之前有项目被选中,则取消选中
                    checkedListBox1.SetItemChecked(selectedIndex, False)
                End If
                selectedIndex = itemHit ' 更新选定项
                checkedListBox1.SetItemChecked(itemHit, True) ' 勾选新选中的项目
            Else ' 如果点击的是之前选中的项目,则不触发任何操作
                Return
            End If
        Else ' 如果点击了空白区域
            If selectedIndex >= 0 Then ' 取消选中的项目
                checkedListBox1.SetItemChecked(selectedIndex, False)
                selectedIndex = -1 ' 清空选定项
            End If
        End If
    End Sub
    

    这段代码会根据鼠标点击的位置来决定是否改变选中的项目,只有当点击的是已有的项目时才会更新选中状态,点击空白区域则会取消选中的项目。这样就实现了只对项目进行操作,而不会因为点击空白区域触发事件。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月26日

悬赏问题

  • ¥20 如何再GIS用海岸线建立缓冲区
  • ¥15 codeblock遇到问题了,求帮助😭
  • ¥15 Qt6.8.0加载网页MSVC2022
  • ¥15 360浏览器m2的这个值
  • ¥15 国内有哪些厂商做automlops的?
  • ¥15 skynet pb mysql
  • ¥15 笔记本外接显示器分辨率太低各种方法都用过了调不高
  • ¥15 Redstone R0697-F00 D2020 交换机 OS
  • ¥50 H5+js 动态数字画廊怎么做?
  • ¥20 外向内全景图像拼接相关项目和论文咨询