构建一个类似于VS选项对话框的选项对话框
问题描述:
我已经阅读了this question,它谈论的是同样的事情,但我对设计有一个具体问题。如你所知,VS中的选项对话框是左边的TreeView控件,右边是控制面板,其中包含当前选择TreeView控件的所有选项。基于上述问题给出的建议,我决定为每个“面板”选项建立一个UserControl。我正在尝试确定当用户在TreeView中选择特定节点时使所选面板可见并隐藏所有其他面板的最佳方式。在当在TreeView一个新的节点选择了做以下为我的事件处理程序:构建一个类似于VS选项对话框的选项对话框
If e.Node.Name.CompareTo("PanelAName") = 0 Then
PanelA.Visible = True
PanelA.Enabled = True
PanelB.Visible = False
PanelB.Enabled = False
ElseIf e.Node.Name.CompareTo("PanelBName") = 0 Then
PanelA.Visible = False
PanelA.Enabled = False
PanelB.Visible = True
PanelB.Enabled = True
End If
唯一的问题是而不是只是在示例代码中的两个面板我将有一个像15-25。尽管我仍然可以像这样做,但似乎还需要更多的代码行。任何建议在更好的方式?
答
您可以尝试利用节点的Tag属性持有的名称相关的面板,然后尝试在表格上循环面板和与面板名字比较节点名称:
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) {
foreach (Panel p in this.Controls.OfType<Panel>()) {
if (p.Name == e.Node.Tag.ToString()) {
p.Visible = true;
} else {
p.Visible = false;
}
}
}
你可以添加从每个面板的引用到节点的标签属性,以及:
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) {
foreach (Panel p in this.Controls.OfType<Panel>()) {
p.Visible = e.Node.Tag.Equals(p);
}
}
答
如何把在树节点的标签属性的控件,然后选择树节点时,相应的控制权在你的指尖。 ..
标记是Object类型的,所以它可以容纳一个引用。显然你需要投。
使用策略模式。 – MoonKnight
循环遍历容器中的所有控件(面板),如果名称不匹配,则使它们不可见? – davisoa