Проверка флажка после проверки другого (TreeView) - PullRequest
0 голосов
/ 22 марта 2012

Итак, у меня есть этот TreeView с 3 родительскими узлами, каждый с несколькими дочерними узлами.Есть конкретный дочерний элемент, который зависит от двух других дочерних элементов в одном родительском узле.Вот код, который я сделал:

private void tvMorgan_AfterCheck(object sender, TreeViewEventArgs e)
    {
        if ((e.Node.Text.Contains("BRL/EUR")) && (e.Node.Parent.Text.Contains("FWD")))
        {
            TreeNode tnParent = e.Node.Parent;
            tnParent.Nodes["BRL/USD"].Checked = true;
            tnParent.Nodes["EUR/USD"].Checked = true;
        }
    }

Когда я запускаю его, он не может найти те два узла, которые я хочу проверить.Заранее спасибо

1 Ответ

0 голосов
/ 22 марта 2012

Как отметили комментаторы, в ваших узлах, скорее всего, отсутствует имя, которое является ключом , используемым при поиске строкового индекса.Это легко осуществить, поскольку большинство узлов создаются во время выполнения.

Простой способ добавить имя:

myParent.Nodes.Add(new TreeNode("BRL/USD") { Name = "BRL/USD" });
myParent.Nodes.Add(new TreeNode("EUR/USD") { Name = "EUR/USD" });

Тогда ваш код должен работать:

if (tnParent.Nodes.ContainsKey("EUR/USD"))
  tnParent.Nodes["EUR/USD"].Checked = true;

Вы должнывероятно, используйте ту же логику в вашем if условии, чтобы вы меньше зависели от свойства text, которое действительно следует использовать только для целей отображения:

if ((e.Node.Name == "BRL/EUR") ...

Если не задавать имена, то вы быпридется искать дерево узлов самостоятельно, чтобы найти «текст»:

TreeNode found = tnParent.Nodes.OfType<TreeNode>().Where(x => x.Text.Contains("EUR/USD")).First();
if (found != null)
  found.Checked = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...