代码之家  ›  专栏  ›  技术社区  ›  John

基于组合框选择显示/隐藏一堆按钮的干净方法

  •  0
  • John  · 技术社区  · 15 年前

    我正在用visual studio 2005在vb.net中编写一个独立的应用程序。

    我想展示/隐藏一堆 Button 基于选定的 ComboBox . 每个选择都有一组不同的 纽扣 我想把它们排列成一个漂亮的网格。

    驾驶A TabControl 随着 组合框 值是我想要的行为类型,但我不希望它看起来像用户的tabcontrol,因为它可能会让人困惑。

    有办法吗?

    基本上,我希望组合框的selection1显示按钮1-4,selection2显示按钮5-11,selection3显示(可能)按钮1、3、5、6和8,等等,让它们排列得很好,并且让gui只显示组合框和按钮。

    一如既往地提前谢谢你!

    3 回复  |  直到 15 年前
        1
  •  2
  •   David    15 年前

    使用A Panel 控件(或多个,如果项目没有相邻分组)并相应地设置可见性。

    (新增) 您可以将面板堆叠在一起,使按钮看起来都位于同一位置。但它变成了维护的噩梦,我不推荐它。

    黑客警告 -以下是一个黑客,但它的工作。

    另一个选项是使用制表符控件,但隐藏制表符按钮。(可以通过将面板放置在按钮上来完成此操作,但必须注意让用户调整窗体的大小。)然后根据下拉式更改设置tabindex。

    再次编辑-根据评论添加

    如果使用hack,可以将其添加到组合框的选定索引更改事件….

    (代码可能是错误的,因为我不在我的dev pc上,无法检查,但您知道了)

    TabControl1.SelectedIndex = ComboBox1.SelectedIndex
    
        2
  •  2
  •   Jamie    15 年前

    你可以把所有的按钮都放在表格的面板上。然后,当组合框的selectedIndex事件触发时,可以循环浏览面板上的按钮,并根据它们的标记属性打开和关闭它们。

    在本例中,您可以将每个按钮的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
    
        3
  •  1
  •   M.A. Hanin    15 年前

    也许用一个 FlowLayoutPanel 将帮助您显示按钮。 可以使用锯齿数组定义哪些按钮属于哪个组合框项。

    推荐文章