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

Visual Basic调用子程序后如何禁用列表框后续输入

实现方案

你只需要在双击事件的逻辑执行完成后,将所有列表框的Enabled属性设置为False即可禁用后续所有输入,修改后的代码如下:

Public Sub LstAnswer4_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lstAnswer4.MouseDoubleClick
    If res4 = 2 Then
        MsgBox("correct")
        Score = Score + 1
        ListBox1.Items.Clear()
        Dim displayscore As Object
        displayscore = (Score & " out of " & outof)
        ListBox1.Items.Add(displayscore)
    Else 
        MsgBox("wrong")
    End If
    ' 禁用所有列表框,替换为你实际的4个列表框控件名即可
    lstAnswer1.Enabled = False
    lstAnswer2.Enabled = False
    lstAnswer3.Enabled = False
    lstAnswer4.Enabled = False
    ' 若需要保留ListBox1的操作可注释下一行
    ListBox1.Enabled = False
End Sub

优化建议

如果其余3个列表框也绑定了双击事件,你可以把禁用逻辑封装成通用子过程,避免重复写代码:

' 定义通用禁用方法
Private Sub DisableAllAnswerListBoxes()
    lstAnswer1.Enabled = False
    lstAnswer2.Enabled = False
    lstAnswer3.Enabled = False
    lstAnswer4.Enabled = False
    ListBox1.Enabled = False
End Sub

在每个列表框的双击事件最后调用即可:

Call DisableAllAnswerListBoxes()

可选方案(不禁用控件外观,仅屏蔽操作)

如果你不想让列表框变灰,只需要屏蔽后续的双击响应,可以在窗体类中声明一个标记变量:

' 窗体类级别变量,标记是否已经完成作答
Dim isAnswered As Boolean = False

然后在每个双击事件开头先判断标记,作答完成后修改标记:

Public Sub LstAnswer4_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles lstAnswer4.MouseDoubleClick
    ' 已经作答过直接退出,不执行后续逻辑
    If isAnswered Then Exit Sub

    If res4 = 2 Then
        MsgBox("correct")
        Score = Score + 1
        ListBox1.Items.Clear()
        Dim displayscore As Object
        displayscore = (Score & " out of " & outof)
        ListBox1.Items.Add(displayscore)
    Else 
        MsgBox("wrong")
    End If

    ' 修改标记,后续所有双击事件都不会响应
    isAnswered = True
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:36:05