清洁方式显示/隐藏基于ComboBox选择的一堆按钮

时间:2010-04-14 21:47:02

标签: vb.net user-interface visual-studio-2005 button show-hide

我正在使用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和按钮。

一如既往地感谢!

3 个答案:

答案 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可能会帮助您显示按钮。 您可以使用锯齿状数组来定义哪些按钮属于哪个组合框项目。