1. ホーム
  2. c#

[解決済み] ツリービューに子ノードを追加する

2022-02-25 06:15:29

質問

私はC#の初心者で、プログラミングの経験もありません。しかし、C#の基礎は終了しています。 今、私は親ノードと子ノードを追加することによって、単純なツリービューを設計したいと思います。

2番目のノードに2番目の子供を追加したいのですが、ここでかなり行き詰ってしまい、次にどうすればいいのかわかりません。

何かアイデアはありますか?

以下はそのコードです。

    private void addParentNode_Click(object sender, EventArgs e)
    {
        string yourParentNode;
        yourParentNode = textBox1.Text.Trim();
        treeView2.Nodes.Add(yourParentNode);
    }

    private void addChildNode_Click(object sender, EventArgs e)
    {
        string yourChildNode;
        yourChildNode = textBox1.Text.Trim();
        treeView2.Nodes[0].Nodes.Add(yourChildNode);
    }

すみません、はっきりしなくて、本当にここにこれが必要なのかどうか、よくわからないんです。

  //treeView1.BeginUpdate(); 
  //treeView1.Nodes.Clear();

私がやろうとしていることは、親ノードと子ノードを追加することです。私のコードでは、複数の親ノードを追加することができますが、子ノードを追加したい場合は、最初の親ノードにのみ追加されます。 私は、子ノードを追加する場合、私はそれを第二の親または第三の親に追加したいです。

私のコードでは、treeview2という名前の1つのツリービューだけを使用しています。 以下は スクリーンショット

最終的にはこのようなコードになりました。 elseを入れる前に、何も選択しないとエラーになります。そこで、何も選択されていない場合は、"child node" を "default node" または (parent1 node) に追加するようにしたのです。これでうまくいきそうです。ありがとうございます;-)

    //This is for adding a parent node
    private void addParentNode_Click(object sender, EventArgs e)
    {
        treeView2.BeginUpdate();

        string yourParentNode;
        yourParentNode = textBox1.Text.Trim();
        treeView2.Nodes.Add(yourParentNode);
        treeView2.EndUpdate();
    }

    //This is for adding child node
    private void addChildNode_Click(object sender, EventArgs e)
    {
        if (treeView2.SelectedNode != null)
        {
            string yourChildNode;
            yourChildNode = textBox1.Text.Trim();

            treeView2.SelectedNode.Nodes.Add(yourChildNode);
            treeView2.ExpandAll();
        }
        //This is for adding the child node to the default node(parent 1 node)
        else
        {
            string yourChildNode;
            yourChildNode = textBox1.Text.Trim();
            treeView2.Nodes[0].Nodes.Add(yourChildNode);
        }

追加質問です。このコードをより良くするための他の方法はありますか?なぜなら、ここでは、文字列 "yourChildNode" を2回宣言しているからです。1つはifの中で、もう1つはelseの中で、何か簡略化する方法はありますか?

どのように解決するのですか?

そんなに悪いことではないのですが、あなたが treeView2.EndUpdate() の中で addParentNode_Click() メソッドを使用します。
を呼び出すこともできます。 treeView2.ExpandAll() の末尾にある addChildNode_Click() メソッドを使用して、子ノードを直接参照することができます。

private void addParentNode_Click(object sender, EventArgs e) {
  treeView2.BeginUpdate();
  //treeView2.Nodes.Clear();
  string yourParentNode;
  yourParentNode = textBox1.Text.Trim();
  treeView2.Nodes.Add(yourParentNode);
  treeView2.EndUpdate();
}

private void addChildNode_Click(object sender, EventArgs e) {
  if (treeView2.SelectedNode != null) {
    string yourChildNode;
    yourChildNode = textBox1.Text.Trim();
    treeView2.SelectedNode.Nodes.Add(yourChildNode);
    treeView2.ExpandAll();
  }
}

ミスかどうかわかりませんが、TreeViewが2つありました。それを1つのTreeViewに変更しました。

EDIT:追加質問の回答です。
子ノード名を保持する変数をif節の外で宣言することができます。

private void addChildNode_Click(object sender, EventArgs e) {
  var childNode = textBox1.Text.Trim();
  if (!string.IsNullOrEmpty(childNode)) {
    TreeNode parentNode = treeView2.SelectedNode ?? treeView2.Nodes[0];
    if (parentNode != null) {
      parentNode.Nodes.Add(childNode);
      treeView2.ExpandAll();
    }
  }
}

注:以下参照 http://www.yoda.arachsys.com/csharp/csharp2/nullable.html 演算子に関する情報はこちらをご覧ください。