より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

WinFormsのTreeViewでNodeの同じレベルで上下入れ替え

WinFormsのTreeViewのNodeを同じレベルでの入れ替えの実装方法です。

f:id:rimever:20190306080105p:plainf:id:rimever:20190306080137p:plain

今時、こんなネタやるのかと自分でも思うのですが、いざやるとなるとGoogleで検索した後、記事が見つからず。

もういいや。もう寝る。寝たら、なんか思いつくだろう。

とかヌルいことを考えたのでメモ。

  1. 選択中のTreeNodeのインデックスを取得
  2. 選択中のTreeNodeを外す
  3. TreeNodeをInsert
  4. 選択中のTreeNodeを指定し直す(そうすると連続で上下に移動させやすい)

以下のような感じ。

        private void MapMoveUpToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var treeNode = treeView.SelectedNode;
            var parentNode = treeNode.Parent;
            var index = parentNode.Nodes.IndexOf(treeNode);
            treeNode.Remove();
            parentNode.Nodes.Insert(index - 1, treeNode);
            treeView.SelectedNode = treeNode;
        }
        private void MapMoveDownToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var treeNode = treeView.SelectedNode;
            var parentNode = treeNode.Parent;
            var index = parentNode.Nodes.IndexOf(treeNode);
            treeNode.Remove();
            parentNode.Nodes.Insert(index + 1, treeNode);
            treeView.SelectedNode = treeNode;
        }