Конструктор вашего элемента управления работает как во время разработки, так и во время выполнения. Поэтому, как только вы уроните элемент управления в форме, он заполнит дерево. Проблема в том, что узлы будут сериализованы в InitializeComponent (). Взгляните на файл Designer.cs для вашей формы, вы найдете их там. Когда вы запускаете форму, конструктор запускается снова, удваивая список.
Необходимо запретить конструктору добавлять узлы во время разработки. Это немного сложно сделать, вы обычно используете свойство DesignMode, но оно еще не установлено в true в конструкторе. Сделайте это следующим образом:
protected override void OnHandleCreated(EventArgs e) {
base.OnHandleCreated(e);
if (!DesignMode && treeView.Nodes.Count == 0) {
CreateTree(this);
}
}
Или сделайте это явно, добавив открытый метод, который вы вызываете в конструкторе формы или методе OnLoad. Что довольно мудро, вы можете захотеть ловить исключения. Всегда вероятно, когда вы возитесь с файловой системой.