6个check复选框,选中2个其他4个不可选

VB小白123 2019-03-25 09:27:01

不用数组能解决吗
...全文
681 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
脆皮大雪糕 2021-01-28
  • 打赏
  • 举报
回复
用控件数组,轻轻松松。 而且如果控件个数变化,不用改代码(仅要求index要连续)

Option Explicit

Private Sub Check1_Click(Index As Integer)
    Dim i As Integer, tmp As Integer
    For i = Check1.LBound To Check1.UBound
        tmp = tmp + Check1(i).Value
    Next
    For i = Check1.LBound To Check1.UBound
        If tmp > 1 Then
            Check1(i).Enabled = Check1(i).Value
        Else
            Check1(i).Enabled = True
        End If
    Next
End Sub
ruan1978 2021-01-27
  • 打赏
  • 举报
回复
用控件数组解决,通过index去控制,直接解决,你分多个控件,太麻烦了。
vansoft 2021-01-08
  • 打赏
  • 举报
回复
这种设计给用户的体验比较差啊。 如果是多选,但有选择数量限制, 比如你的8个最多选两个, 如果我做的话,8个永远是可以点的, 但是,当你点选第三个时,选中的第一个自动取消,以此类推。 比如,你选3,5,再选1时,3自动取消,再选4时,5取消。
不懂别说哎 2020-12-30
  • 打赏
  • 举报
回复
支持3楼答案,方便快捷
  • 打赏
  • 举报
回复
我用checkchange和click方法解决了
xrbaa 2020-12-11
  • 打赏
  • 举报
回复
引用 5 楼 weixin_42654452 的回复:
如果八个选中一个呢 其他七个不可选 选择另一个当前选中的取消选中状态


其它7个都不可选了,你还选择另一个?
  • 打赏
  • 举报
回复
如果八个选中一个呢 其他七个不可选 选择另一个当前选中的取消选中状态
  • 打赏
  • 举报
回复
算了我帮你做好了 建立一个 check1 然后复制 在连续 粘贴 共计 8 个 --------------------------------------------------一下啊是代码 你看我的代码简单吧 Dim C_index As Integer Private Sub Check1_Click(Index As Integer) If Check1(Index).Value = 1 Then C_index = C_index + 1 If Check1(Index).Value = 0 Then C_index = C_index - 1 For i = 0 To 7 Check1(i).Enabled = True Next i End If If C_index > 1 Then For i = 0 To 7 If Check1(i).Value = 0 Then Check1(i).Enabled = False End If Next i End If End Sub
  • 打赏
  • 举报
回复
简单的 用数控 每操作 一次 对号 变量 加+1 否则 -1 然后出发一次巡查 巡查 发现 变量为 2 那么 所有 非对号的 全不 不可用 代码绝对 少 速度快
milaoshu1020 2019-03-26
  • 打赏
  • 举报
回复
可以用集合代替控件数组,代码如下:

Option Explicit

Private mcolChecks As New Collection

Private Sub Check1_Click()
UpdateStatus
End Sub

Private Sub Check2_Click()
UpdateStatus
End Sub

Private Sub Check3_Click()
UpdateStatus
End Sub

Private Sub Check4_Click()
UpdateStatus
End Sub

Private Sub Check5_Click()
UpdateStatus
End Sub

Private Sub Check6_Click()
UpdateStatus
End Sub

Public Function UpdateStatus()
Dim blnEnabled As Boolean
blnEnabled = IsOtherUsable

Dim objCheck As CheckBox
For Each objCheck In mcolChecks
If blnEnabled Then
objCheck.Enabled = True
Else
If objCheck.Value = vbChecked Then
objCheck.Enabled = True
Else
objCheck.Enabled = False
End If
End If
Next
End Function

Private Function IsOtherUsable() As Boolean
Dim intCount As Integer
intCount = 0

Dim objCheck As CheckBox
For Each objCheck In mcolChecks
If objCheck.Value = vbChecked Then
intCount = intCount + 1
End If
Next

IsOtherUsable = (intCount < 2)
End Function

Private Sub Form_Load()
mcolChecks.Add Check1
mcolChecks.Add Check2
mcolChecks.Add Check3
mcolChecks.Add Check4
mcolChecks.Add Check5
mcolChecks.Add Check6
End Sub

运行示例:



下载地址:
链接:https://pan.baidu.com/s/1APPDqMaoQPAVSluU0jj2Pg
提取码:1rl3
现在还是人类 2019-03-26
  • 打赏
  • 举报
回复
用控件数组吧,这样你不累吗 用控件数组然后再Click事件里循环判断,很容易实现的

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧