You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在鼠标点击时更改Checkbox中的勾选标记

实现Checkbox左右键切换✅/❌标记的解决方案

功能实现逻辑

通过监听Checkbox的MouseUp事件区分左右键操作,分别绑定不同的CheckState;再通过Paint事件自定义绘制对应状态的图标(✅/❌),同时支持直接读取属性检测当前状态。


完整代码实现

' 处理鼠标按键释放事件,区分左右键设置对应状态
Private Sub CheckBox1_MouseUp(sender As Object, e As MouseEventArgs) Handles CheckBox1.MouseUp
    Select Case e.Button
        ' 左键点击:设置为Checked状态,对应✅标记
        Case MouseButtons.Left
            CType(sender, CheckBox).CheckState = CheckState.Checked
        ' 右键点击:设置为Indeterminate状态,对应❌标记
        Case MouseButtons.Right
            CType(sender, CheckBox).CheckState = CheckState.Indeterminate
            booErrorFound = True ' 示例:标记错误状态
    End Select
End Sub

' 自定义绘制Checkbox的显示内容
Private Sub CheckBox1_Paint(sender As Object, e As PaintEventArgs) Handles CheckBox1.Paint
    Dim pPoint As New Point(e.ClipRectangle.Left, e.ClipRectangle.Top)
    Dim boxRect As New Rectangle(pPoint, New Size(22, 22))

    Select Case CheckBox1.CheckState
        ' Checked状态:绘制✅图标
        Case CheckState.Checked
            DrawCheckMark(e, boxRect)
        ' Indeterminate状态:绘制❌图标
        Case CheckState.Indeterminate
            DrawCrossMark(e, boxRect)
    End Select

    ' 绘制Checkbox的边框
    e.Graphics.DrawRectangle(Pens.DarkSlateBlue, boxRect)
End Sub

' 绘制✅标记(使用Wingdings字体对应字符)
Private Sub DrawCheckMark(pePaintEvent As PaintEventArgs, rRectangle As Rectangle)
    Using fFont As New Font("Wingdings", 15.0F, FontStyle.Bold)
        ' Wingdings字体中"ü"对应✅符号
        pePaintEvent.Graphics.DrawString("ü", fFont, Brushes.DarkOrange, rRectangle)
    End Using
End Sub

' 绘制❌标记(使用Wingdings字体对应字符)
Private Sub DrawCrossMark(pePaintEvent As PaintEventArgs, rRectangle As Rectangle)
    Using fFont As New Font("Wingdings", 15.0F, FontStyle.Bold)
        ' Wingdings字体中"û"对应❌符号
        pePaintEvent.Graphics.DrawString("û", fFont, Brushes.DarkGreen, rRectangle)
    End Using
End Sub

状态检测方法

直接读取CheckState属性即可判断当前标记类型:

  • CheckState.Checked:当前显示✅标记
  • CheckState.Indeterminate:当前显示❌标记
  • CheckState.Unchecked:未标记状态(可根据需求补充处理逻辑)

示例检测代码:

If CheckBox1.CheckState = CheckState.Checked Then
    ' 处理✅状态逻辑
    MessageBox.Show("当前是勾选状态(✅)")
ElseIf CheckBox1.CheckState = CheckState.Indeterminate Then
    ' 处理❌状态逻辑
    MessageBox.Show("当前是错误状态(❌)")
End If

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 22:48:14