Я пытаюсь расширить TreeView на C# несколькими методами, чтобы заполнить дерево и проверить подносы. Тем не менее, я столкнулся с проблемой дизайна, когда я не могу получить доступ к фактическим узлам TreeView, чтобы проверить их.TreeView в C#: проверенные субноды не проверяются и не могут использовать параметры ref
Метод PopulateTree() работает по назначению, и CheckBoxesBelow() успешно вызван из WPF.
private void BusinessUnitsForm_Load(object sender, EventArgs e)
{
busUnitTreeView.PopulateTree(busUnitTreeView.GetTreeItems("BU"));
}
// a box is checked, so recursively check all boxes below
private void busUnitTreeView_AfterCheck(object sender, TreeViewEventArgs e)
{
busUnitTreeView.CheckBoxesBelow(sender,ref e);
}
Однако, узлы не остаются проверены после закрытия меню. Это происходит потому, что узлы создаются локально и не ссылаются на исходные узлы дерева. Тем не менее, я не могу добавить «реф» там или следующее сообщение об ошибке происходит:
A property or indexer may not be passed as an out or ref parameter
Глядя на ряд различных нитей на той же ошибки, похоже, я должен был бы создавать новые объекты и возврат их, затем установите исходный объект на новый объект. Это не похоже на очень элегантное решение.
// used to check all sub boxes of a node
public void CheckBoxesBelow(object sender,ref TreeViewEventArgs e)
{
if (busy) return;
busy = true;
try
{
CheckNodes(e.Node, e.Node.Checked);
}
finally
{
busy = false;
}
}
private void CheckNodes(TreeNode node, bool check)
{
foreach (TreeNode child in node.Nodes)
{
child.Checked = check;
CheckNodes(child, check);
}
}
Есть ли лучшее решение, как я мог проверить узлы дерева? В C++ это было бы легко с указателями, но я не понимаю, как это сделать здесь.
Thanks
Какая точка передачи по ссылке? Вы не изменяете ссылку на новый экземпляр где-либо в своих методах, поэтому передача в качестве параметра ref необязательна. –