Vb.net 基于组合框选择显示/隐藏一串按钮的干净方法
我正在使用Visual Studio 2005在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
组合框的选定值显示/隐藏一组按钮
。每个选择都会有一组不同的按钮
来显示,我希望它们排列在一个漂亮的网格中
使用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
但是有些按钮怎么会属于多项选择呢?谢谢你的回答,大卫。我会试试这个。但是有些按钮怎么会属于多项选择呢?谢谢你的回答,大卫。我试试这个,谢谢。我也来试试,谢谢。我也要试一试。