У меня есть тест, который я собираюсь делать довольно часто, поэтому, естественно, я хотел поместить его в метод.
В моем дереве у меня есть две кнопки, левая и правая, которые работают для перемещенияузел вверх на один уровень (уровень? не уверен в правильности используемого слова) или вниз на один уровень.
Тем не менее, некоторые элементы в моем древовидном представлении могут быть размещены только как дочерние элементы других определенных элементов.Некоторые элементы могут быть размещены как дочерние элементы ИЛИ как корневые узлы.
Итак, я создаю метод, в котором я передаю дочерний узел и родительский узел.Дочерний узел - это узел, который станет дочерним по отношению к родительскому узлу, если перемещение прошло успешно.Если щелкнуть левой кнопкой мыши, это означает, что родительский узел на самом деле является родителем текущего родительского узла.Если щелкнуть правой кнопкой мыши, это означает, что родительский узел в настоящее время является дочерним узлом дочернего узла и станет его родительским.
Я уже знаю, является ли узел корневым в момент вызова функции, поэтомуЯ мог бы полностью добавить третий параметр, чтобы определить это ... но зачем добавлять дополнительную сложность, если уже есть простой способ выяснить это, чего я не знаю.Я понял это, используя весь вид дерева, но здесь я пытаюсь сделать это только с узлами.Возможно, это плохо, и я полностью готов принять это и изменить его.
Я использую свои теги для хранения целых объектов, но я дал своим узлам дерева свои собственные изображения в imageindex, и я использую этоimageindex, чтобы определить, с каким типом узла я имею дело.Таким образом, прямо сейчас у меня есть:
private bool TestNodeMovement(TreeNode child, TreeNode parent)
{
bool returnValue = false;
switch(child.ImageIndex)
{
case 0:
case 1:
if ((parent.ImageIndex == 2 && parent.ImageIndex == 4) {
returnValue = true;
}
break;
case 2:
case 4:
if ((parent.ImageIndex == 0 && parent.ImageIndex == 1) {
returnValue = true;
}
break;
default: //all other tree movement types are accepted
returnValue = true;
break;
}
return returnValue;
}
Это самое первое - 0 & 1 - эти значения также могут быть в корне ... поэтому мне нужно проверить там, чтобы увидеть, является ли родительский объект корневым объектом.
Я думаю, я мог бы сделать
if (parent.Parent != null) { }
есть ли лучший способ?