1

私はすでに同じことについて話しているこの質問を読みましたが、デザインについて具体的な質問がありました。ご存知のように、VS のオプション ダイアログは、左側に TreeView コントロールがあり、右側にパネルのようなコントロールがあり、TreeView コントロールの現在の選択に対するすべてのオプションが含まれています。上記の質問で与えられたアドバイスに基づいて、オプションの「パネル」ごとに UserControl を作成することにしました。ユーザーが 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 のサンプル コードに 2 つのパネルしかないことです。私は確かにこのようにそれを行うことができますが、それよりも多くのコード行が必要になるようです. より良い方法に関する提案はありますか?

4

2 に答える 2

1

ノードの 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);
  }
}
于 2012-12-04T16:01:59.520 に答える
1

コントロールをツリーノードのタグプロパティに配置してから、ツリーノードが選択されたときに、適切なコントロールがすぐに利用できるようにしてください...

タグは Object 型であるため、参照を保持できます。明らかに、キャストする必要があります。

于 2012-12-04T16:02:20.663 に答える