У меня есть твилист в моей форме с включенными флажками. Мне нужно добавить что-нибудь в список, чтобы я мог написать этот список. Если я проверю любые родительские узлы (или узлы верхнего уровня), они включают их. Если я выбираю любые родительские узлы, он также выбирает дочерние узлы (это преднамеренно) и отображает их. Но если я проверю только дочерние узлы, он не добавит их в мой список.Почему мои дочерние узлы не обнаружены без выбора родительского узла?
//check to see if there are any nodes checked
bool nodeHasCheck = false;
foreach (TreeNode n in nodes)
{
if (n.Checked)
{
nodeHasCheck = true;
break;
}
GetExtendedFeatures(n.Nodes);
}
//only return stuff if something's checked
if (nodeHasCheck == true)
{
foreach (TreeNode n in nodes)
{
if (n.Checked)
{
//n.BackColor = Color.Black;
nodeList.Add(n.Text);
}
GetExtendedFeatures(n.Nodes);
}
также, что если я выбираю 2 родительских узлов, рекурсия, что происходит (Подумайте, что это правильный термин) вызывает его, чтобы найти первый проверил узел, а затем начинается снова, и добавляет, что же проверяемого узла а второй раз, прежде чем он попадает во второй набор узлов.
Я представил свой тест узла, надеюсь, этого достаточно, чтобы определить, почему он не обнаруживает дочерние узлы, выбранные без выбранного родительского узла.
ОБНОВЛЕНО - 3/18/13 Мой код кнопки нажмите:
private void btnGenerate_Click(object sender, EventArgs e)
{
ScanNodes(treeView1.Nodes[0]);
}
private void ScanNodes(TreeNode parent)
{
foreach (TreeNode node in parent.Nodes)
{
if (node.Checked)
{
nodeList.Add(node.Text.ToString());
}
if (node.Nodes.Count > 0)
{
ScanNodes(node);
}
}
var message = string.Join(Environment.NewLine, nodeList);
message = message.Replace(Environment.NewLine, ", ");
MessageBox.Show(message);
nodeList.Clear();
}
Я не вижу здесь рекурсии, если GetExtendedFeatures не на самом деле метод кода вы показываете. Для вашего текущего кода он проходит только через дочерние узлы проверенных родителей. ayou нужно перебрать все узлы и посмотреть, выбраны они или нет, а затем добавить в список. – echavez