【问题标题】:Clean way to display/hide a bunch of buttons based on a ComboBox selection基于组合框选择显示/隐藏一堆按钮的简洁方法
【发布时间】:2011-02-08 03:16:12
【问题描述】:

我正在使用 Visual Studio 2005 在 VB.NET 中编写一个独立的应用程序。

我想根据ComboBox 的选定值显示/隐藏一堆Buttons。每个选择都会有一组不同的Buttons 来显示,我想让它们排列成一个漂亮的网格。

使用ComboBox 值驱动TabControl 将是我想要的那种行为,但我不希望它对用户看起来像一个TabControl,因为它可能会造成混淆。

有没有办法做到这一点?

基本上,我希望 ComboBox 的 Selection1 显示按钮 1-4,Selection2 显示按钮 5-11,Selection3 显示(可能)按钮 1、3、5、6 和 8 等,有它们排列得很好,并且 GUI 只显示 ComboBox 和按钮。

一如既往地提前致谢!

【问题讨论】:

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


    【解决方案1】:

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

    (添加) 您可以将面板堆叠在一起,以便所有按钮看起来都在同一个位置。但它会成为维护的噩梦,我不推荐它。,

    黑客警告 - 以下是黑客攻击,但它有效。

    另一种选择是使用选项卡控件,但隐藏选项卡按钮。 (您可以通过在按钮上方放置一个面板来做到这一点,但您必须小心让用户调整表单的大小。)然后根据下拉更改设置 TabIndex。

    再次编辑 - 根据评论添加

    如果您使用 hack,您可以将其添加到 ComboBox 的选定索引更改事件中......

    (代码可能是错误的,因为我不在我的开发电脑上,无法检查,但你明白了)

    TabControl1.SelectedIndex = ComboBox1.SelectedIndex
    

    【讨论】:

    • 但是某些按钮如何“属于”多项选择?
    • 感谢大卫的回答。我试试这个。
    【解决方案2】:

    您可以将所有按钮放在表单的面板上。然后当组合框的 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】:

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

      【讨论】:

      • 谢谢。我也会试一试。
      猜你喜欢
      • 2022-07-01
      • 1970-01-01
      • 2014-05-12
      • 2021-07-17
      • 2014-10-04
      • 2018-09-29
      • 2012-09-18
      • 2022-07-01
      • 2019-03-19
      相关资源
      最近更新 更多