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
相关产品推荐
相关产品推荐

