我正在使用Visual Studio 2005在VB.NET中编写一个独立的应用程序。
我想根据Button
的选定值显示/隐藏一堆ComboBox
。每个选择都会显示一组不同的Button
,我希望将它们排列在一个漂亮的网格中。
使用TabControl
值驱动ComboBox
将是我想要的行为,但我不希望它看起来像TabControl给用户,因为它可能会让人感到困惑。
有办法做到这一点吗?
基本上,我希望ComboBox的Selection1显示按钮1-4,Selection2显示按钮5-11,Selection3显示(可能)按钮1,3,5,6和8等等它们安排得很好,并且GUI只显示ComboBox和按钮。
一如既往地感谢!
答案 0 :(得分:2)
使用Panel控件(如果项目没有彼此相邻分组,则为多个),并相应地设置可见性。
(新增) 您可以将面板堆叠在一起,这样按钮看起来就像是在同一个位置。但它变成了维护的噩梦,我不推荐它。
黑客警告 - 以下是黑客,但它确实有效。
另一种选择是使用选项卡控件,但隐藏选项卡按钮。 (您可以通过将面板放在按钮上来完成此操作,但您必须小心让用户调整表单大小。)然后根据下拉列表更改设置TabIndex。
再次修改 - 按评论添加
如果您使用hack,可以将其添加到ComboBox的选定索引更改事件....
(代码可能有误,因为我不在我的开发电脑上,无法检查,但你明白了)
TabControl1.SelectedIndex = ComboBox1.SelectedIndex
答案 1 :(得分:2)
您可以将所有按钮放在表单上的面板上。然后当组合框的SelectedIndex事件触发时,您可以遍历面板上的按钮并根据其Tag属性打开和关闭它们。
对于此示例,您可以将每个按钮的Tag属性设置为您要为其打开的组合框索引或索引。如果您希望它对多个组合选择可见,则只需逗号分隔标记属性中的索引值。
您无需关闭组合框索引。例如,您可以使用所选文本。如果你这样做,只需将文本显示在tag属性中显示按钮,并将代码从ComboBox1.SelectedIndex.ToString更改为ComboBox1.SelectedText。
按钮会在设计时打开和关闭它们的位置,但您可以在此处添加一些代码以动态排列它们,以便所有可见按钮排列整齐。
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
For Each ctrl As Control In Me.Panel1.Controls
If TypeOf ctrl Is Button Then
If Array.IndexOf(Split(ctrl.Tag, ","), ComboBox1.SelectedIndex.ToString) > -1 Then
ctrl.Visible = True
Else
ctrl.Visible = False
End If
End If
Next
End Sub
答案 2 :(得分:1)
使用FlowLayoutPanel可能会帮助您显示按钮。 您可以使用锯齿状数组来定义哪些按钮属于哪个组合框项目。