0

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

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

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

有没有办法做到这一点?

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

一如既往地提前感谢!

4

3 回答 3

2

使用一个面板控件(如果项目没有彼此相邻分组,则使用多个)并相应地设置可见性。

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

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

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

再次编辑 - 每条评论添加

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

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

TabControl1.SelectedIndex = ComboBox1.SelectedIndex
于 2010-04-14T21:50:02.240 回答
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
于 2010-07-08T21:40:32.853 回答
1

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

于 2010-04-14T21:56:30.203 回答