Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 基于组合框选择显示/隐藏一串按钮的干净方法_Vb.net_User Interface_Visual Studio 2005_Button_Show Hide - Fatal编程技术网

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

Vb.net 基于组合框选择显示/隐藏一串按钮的干净方法,vb.net,user-interface,visual-studio-2005,button,show-hide,Vb.net,User Interface,Visual Studio 2005,Button,Show Hide,我正在使用Visual Studio 2005在VB.NET中编写一个独立的应用程序 我想根据组合框的选定值显示/隐藏一组按钮。每个选择都会有一组不同的按钮来显示,我希望它们排列在一个漂亮的网格中 使用ComboBox值驱动TabControl将是我想要的行为,但我不希望它在用户看来像一个TabControl,因为它可能会让人困惑 有办法做到这一点吗 基本上,我希望选择组合框的1来显示按钮1-4,选择2来显示按钮5-11,选择3来显示(可能)按钮1、3、5、6和8,等等,让它们排列得很好,让GU

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

我想根据
组合框的选定值显示/隐藏一组
按钮
。每个选择都会有一组不同的
按钮
来显示,我希望它们排列在一个漂亮的网格中

使用
ComboBox
值驱动
TabControl
将是我想要的行为,但我不希望它在用户看来像一个TabControl,因为它可能会让人困惑

有办法做到这一点吗

基本上,我希望选择组合框的1来显示按钮1-4,选择2来显示按钮5-11,选择3来显示(可能)按钮1、3、5、6和8,等等,让它们排列得很好,让GUI只显示组合框和按钮

一如既往地提前感谢

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

(新增) 您可以将面板堆叠在彼此的顶部,使按钮看起来都位于同一位置。但这会成为维护的噩梦,我不推荐这样做

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

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

再次编辑-根据评论添加

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

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

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

(新增) 您可以将面板堆叠在彼此的顶部,使按钮看起来都位于同一位置。但这会成为维护的噩梦,我不推荐这样做

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

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

再次编辑-根据评论添加

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

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

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

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

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

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

但是有些按钮怎么会属于多项选择呢?谢谢你的回答,大卫。我会试试这个。但是有些按钮怎么会属于多项选择呢?谢谢你的回答,大卫。我试试这个,谢谢。我也来试试,谢谢。我也要试一试。