combobox - 用户窗体列表框多选计数以隐藏/取消隐藏其他控件的数量
问题描述
我有一个由一个范围填充的列表框,其中启用了多选 (1)。选定的项目(最多 10 个)然后填充具有相邻组合框和文本框的 Label.Captions,需要用户提供更多信息。我正在寻找计算从列表框中选择的数量(1 到 10 之间)然后隐藏我的相对组合框和文本框(同样,1 到 10)的代码。因此,如果在列表框中进行了 4 个选择,则只有组合/文本框 1 到 4 是可见的(组合/文本框 5 到 10 是隐藏的)。
我有一些我认为需要但无法完成完整过程的代码元素。
For lstbxCount = 1 To 10
If lstbxCount = 1 Then
UserForm2.Controls("ComboBox" & lstbxCount).Visible = True
UserForm2.Controls("TextBox" & lstbxCount).Visible = True
Next intCount
但是上面,如果它有效,我认为只会显示一个具有最高计数的组合框,并且会隐藏所有其他组合框。我正在寻找一个从组合框 1 循环到 lstbxCount 数字并显示这些数字的代码,并隐藏高于 lstbxCount 整数的任何内容。
谢谢。
解决方案
您的代码在正确的路径上,但是确实需要进行一些调整才能使其正常工作。
目前,您怀疑您的代码仅在存在 ListBox 项目 1 时才会显示您的控件。
下面的代码将根据选定的 ListBox 项显示/隐藏用户窗体控件。
注意:在我的测试中,我创建了:
- 一个名为的用户窗体
UserForm1
- 一个名为的列表框
ListBox1
- 三个标签命名
Label1
,Label2
&Label3
TextBox1
三个名为,TextBox2
&的TextBoxTextBox3
该代码已分配给 UserForm 模块中的 ListBox Change 事件,因此每次 ListBox 发生更改时,它将显示/隐藏相关控件。
Private Sub ListBox1_Change()
Dim i As Long
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) = True Then
i = i + 1
Me.Controls("Label" & i).Visible = True
Me.Controls("TextBox" & i).Visible = True
i = i - 1
ElseIf Me.ListBox1.Selected(i) = False Then
i = i + 1
Me.Controls("Label" & i).Visible = False
Me.Controls("TextBox" & i).Visible = False
i = i - 1
End If
Next
End Sub
解释:
该变量i
表示我用作计数器的整数。
该For...Next
语句从 0 循环到 ListBox 项计数减 1。这是因为 ListBox 项具有从零开始的索引,这意味着列表框中的第一项是索引号 0,第二项是索引号 1,依此类推。所以,我们从 0(第一个列表框项)循环直到ListCount
值减 1。
注意:为了澄清,列表框项索引编号是从零开始的(从 0 开始),而ListCount
属性不是(从 1 开始)。这也将进一步解释。
If Me.ListBox1.Selected(i) = True Then
使用我们的计数器变量作为每个 ListBox 项的索引号(从 0 开始并在每次循环迭代时增加 1)来确定它是否被选中。
如果它被选中或未选中,i = i + 1
则用于将我们的计数器增加 1。一旦我们的计数器值增加,我们现在可以引用正确的控件来显示/隐藏。一旦我们这样做了,我们将计数器减少 1 ( i = i - 1
),因为每次循环迭代的值都会i
增加。如果我们在下一次循环迭代之前不减少i
它,我们将跳过列表项,这意味着有些项目要显示/隐藏控件,有些则不会。
为了详细说明,让我们删除变量i
并以循环的第一次迭代为例;
第一次迭代将转化为:
Private Sub ListBox1_Change()
For 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(0) = True Then
Me.Controls("Label1").Visible = True
Me.Controls("TextBox1").Visible = True
ElseIf Me.ListBox1.Selected(i) = False Then
Me.Controls("Label1").Visible = False
Me.Controls("TextBox1").Visible = False
End If
Next
End Sub
我将留给您调整代码以适合您的变量并引用对象/控件的正确名称。
推荐阅读
- java - java.math.BigDecimal 除法不准确
- javascript - 标题显示繁忙的图像在 IE11 中不工作它在 IE11 兼容模式下工作 IE8 chrome firefox
- outlook - 如何在outlook插件中使用office-js的预览版
- python - 使用 Django 进行测试时,MySQL 未保存在 test_ 数据库上
- javascript - 图片上传反应输入表单:无法读取属性'0
- ruby-on-rails - Rails 5 如何从咖啡脚本文件中获取 Ajax api 调用的响应到 Rails 视图中
- highcharts - Highcharts:如何将 grouped_categories 用于 csvURL?
- node.js - 如何从 React Native Navigator 中删除标题?
- scala - 如何使用 SCALA 将字符集转换为 ASCII 并打印重复奇数次的字符
- html - 如何使用 Angular 6 在 html 中显示动态 json 数据?