构建类似于 VS 选项对话框的选项对话框



我已经读过这个问题,它谈到了同样的事情,但我有一个关于设计的具体问题。如您所知,VS 中的选项对话框是左侧的 TreeView 控件和右侧的类似面板的控件,其中包含当前选择 TreeView 控件的所有选项。根据上述问题中给出的建议,我决定为每个选项"面板"构建一个用户控件。我正在尝试确定当用户在 TreeView 中选择特定节点时使所选面板可见而隐藏所有其他面板的最佳方法。在我的事件处理程序中,当选择树视图中的新节点时

,执行以下操作:
        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;
    }
  }
}

您也可以将每个面板中的引用添加到节点的 tag 属性中:

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) {
  foreach (Panel p in this.Controls.OfType<Panel>()) {
    p.Visible = e.Node.Tag.Equals(p);
  }
}

如何将控件放在树节点的标记属性中,然后在选择树节点时,相应的控件就触手可及......

该标记的类型为 Object,因此它可以保存引用。显然,你需要投掷。

最新更新