我正在使用Visual Studio2005用VB.NET编写一个独立的应用程序。
我想根据某个Button的选定值显示/隐藏一组ComboBox。每个选择将有一组不同的Button来显示,我希望将它们排列在一个漂亮的网格中。
使用ComboBox值驱动TabControl将是我想要的那种行为,但我不希望它对用户来说看起来像TabControl,因为这可能会让人感到困惑。
有没有办法做到这一点?
基本上,我希望ComboBox的Selection1显示按钮1-4,Selection2显示按钮5-11,Selection3显示(可能)按钮1,3,5,6和8,等等,它们排列得很好,并且让图形用户界面只显示ComboBox和按钮。
一如既往的提前感谢!
发布于 2010-04-15 05:50:02
使用Panel控件(或多个,如果项不是彼此相邻分组的话),并相应地设置可见性。
(添加)您可以将面板堆叠在一起,以便所有按钮看起来都在同一位置。但它变成了维护的噩梦,我不推荐它。
黑客警告-以下是一个黑客攻击,但它是有效的。
另一种选择是使用选项卡控件,但隐藏选项卡按钮。(您可以通过在按钮上放置一个面板来完成此操作,但您必须小心让用户调整窗体的大小。)然后根据下拉更改来设置TabIndex。
再次编辑-按注释添加
如果使用hack,可以将其添加到ComboBox的selected index changed事件中。
(代码可能是错误的,因为我不在我的开发pc上,无法检查,但你明白我的意思了)
TabControl1.SelectedIndex = ComboBox1.SelectedIndex发布于 2010-07-09 05:40:33
你可以把你所有的按钮放在表单的一个面板上。然后,当combobox的SelectedIndex事件触发时,您可以遍历面板上的按钮,并根据它们的Tag属性打开和关闭它们。
对于本例,您需要将每个按钮的Tag属性设置为等于您希望为其打开的combobox索引。如果您希望它在多个组合选择中可见,只需用逗号分隔tag属性中的索引值。
您不必关闭combobox索引。例如,您可以使用选定的文本。如果您这样做了,只需将显示按钮的文本放在标记属性中,并将代码从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-04-15 05:56:30
也许使用FlowLayoutPanel可以帮助你显示这些按钮。您可以使用交错数组来定义哪些按钮属于哪个组合框项。
https://stackoverflow.com/questions/2641287
复制相似问题